
<!DOCTYPE HTML>
<html lang="zh-hans" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>音视频 · Aivin开发笔记</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        <meta name="author" content="Aivin">
        
        
    
    <link rel="stylesheet" href="../../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-search-plus/search.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-tbfed-pagefooter/footer.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-local-video/video-js.min.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-splitter/splitter.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-theme-comscore/test.css">
                
            
        

    

    
        
        <link rel="stylesheet" href="../../styles/website.css">
        
    

        
    
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="音视频第三方库.html" />
    
    
    <link rel="prev" href="系统编译剪裁.html" />
    

    
        <link rel="shortcut icon" href='../../assets/images/favicon.ico' type="image/x-icon">
    
    
        <link rel="bookmark" href='../../assets/images/favicon.ico' type="image/x-icon">
    
    
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="输入并搜索" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="../../">
            
                <a href="../../">
            
                    
                    首页
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="../doc/常用网站.html">
            
                <a href="../doc/常用网站.html">
            
                    
                    常用网站
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="../常用软件/常用软件和框架.html">
            
                <a href="../常用软件/常用软件和框架.html">
            
                    
                    常用软件和框架
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="../doc/开发规范.html">
            
                <a href="../doc/开发规范.html">
            
                    
                    开发规范
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5" data-path="../doc/开源软件.html">
            
                <a href="../doc/开源软件.html">
            
                    
                    开源软件和框架
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6" data-path="../doc/Android常用代码.html">
            
                <a href="../doc/Android常用代码.html">
            
                    
                    Android常用代码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7" data-path="../源码阅读/源码阅读配置.html">
            
                <a href="../源码阅读/源码阅读配置.html">
            
                    
                    源码阅读
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.7.1" data-path="../源码阅读/其他框架源码.html">
            
                <a href="../源码阅读/其他框架源码.html">
            
                    
                    其他框架源码
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.8" data-path="../产品经理/产品经理.html">
            
                <a href="../产品经理/产品经理.html">
            
                    
                    产品经理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9" data-path="../设计模式/设计模式.html">
            
                <a href="../设计模式/设计模式.html">
            
                    
                    设计模式
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.9.1" data-path="../设计模式/设计模式.html">
            
                <a href="../设计模式/设计模式.html">
            
                    
                    设计模式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.2" data-path="../设计模式/模式详解.html">
            
                <a href="../设计模式/模式详解.html">
            
                    
                    模式详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.3" data-path="../设计模式/mvc等.html">
            
                <a href="../设计模式/mvc等.html">
            
                    
                    mvc等
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.10" data-path="../数据结构/常用数据结构.html">
            
                <a href="../数据结构/常用数据结构.html">
            
                    
                    基本算法
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.10.1" data-path="../数据结构/常用数据结构.html">
            
                <a href="../数据结构/常用数据结构.html">
            
                    
                    常用数据结构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.2" data-path="../常用算法/算法术语.html">
            
                <a href="../常用算法/算法术语.html">
            
                    
                    算法术语
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.3" data-path="../常用算法/排序算法.html">
            
                <a href="../常用算法/排序算法.html">
            
                    
                    排序算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.4" data-path="../常用算法/查找算法.html">
            
                <a href="../常用算法/查找算法.html">
            
                    
                    查找算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.5" data-path="../常用算法/大数相加.html">
            
                <a href="../常用算法/大数相加.html">
            
                    
                    大数相加
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.6" data-path="../常用算法/集合的所有子集.html">
            
                <a href="../常用算法/集合的所有子集.html">
            
                    
                    获得集合的所有子集
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.7" data-path="../常用算法/扫描线种子填充算法.html">
            
                <a href="../常用算法/扫描线种子填充算法.html">
            
                    
                    扫描线种子填充算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.8" data-path="../常用算法/其他算法.html">
            
                <a href="../常用算法/其他算法.html">
            
                    
                    其他算法
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.11" data-path="../java基础/原码补码反码.html">
            
                <a href="../java基础/原码补码反码.html">
            
                    
                    Java部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.11.1" data-path="../java基础/原码补码反码.html">
            
                <a href="../java基础/原码补码反码.html">
            
                    
                    原码补码反码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.2" data-path="../java基础/java常用代码.html">
            
                <a href="../java基础/java常用代码.html">
            
                    
                    java常用代码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.3" data-path="../java基础/JVM详解.html">
            
                <a href="../java基础/JVM详解.html">
            
                    
                    JVM详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.4" data-path="../java基础/类加载机制.html">
            
                <a href="../java基础/类加载机制.html">
            
                    
                    类加载机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.5" data-path="../java基础/内存模型.html">
            
                <a href="../java基础/内存模型.html">
            
                    
                    内存模型
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.6" data-path="../java基础/GC机制.html">
            
                <a href="../java基础/GC机制.html">
            
                    
                    GC机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.7" data-path="../java基础/对象内存布局.html">
            
                <a href="../java基础/对象内存布局.html">
            
                    
                    对象内存布局
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.8" data-path="../java基础/继承多态.html">
            
                <a href="../java基础/继承多态.html">
            
                    
                    继承和多态
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.9" data-path="../java基础/相等判断.html">
            
                <a href="../java基础/相等判断.html">
            
                    
                    相等判断
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.10" data-path="../java基础/Java容器类.html">
            
                <a href="../java基础/Java容器类.html">
            
                    
                    Java容器类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.11" data-path="../java基础/Java枚举.html">
            
                <a href="../java基础/Java枚举.html">
            
                    
                    Java枚举
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.12" data-path="../java基础/自定义异常.html">
            
                <a href="../java基础/自定义异常.html">
            
                    
                    自定义异常
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.13" data-path="../java基础/深度拷贝.html">
            
                <a href="../java基础/深度拷贝.html">
            
                    
                    深度拷贝
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.14" data-path="../java基础/泛型详解.html">
            
                <a href="../java基础/泛型详解.html">
            
                    
                    泛型详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.15" data-path="../java基础/线程详解.html">
            
                <a href="../java基础/线程详解.html">
            
                    
                    线程详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.16" data-path="../java基础/java注解.html">
            
                <a href="../java基础/java注解.html">
            
                    
                    注解详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.17" data-path="../java基础/数据解析.html">
            
                <a href="../java基础/数据解析.html">
            
                    
                    数据解析
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.18" data-path="../java基础/java8新特性.html">
            
                <a href="../java基础/java8新特性.html">
            
                    
                    Java8新特性
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.12" data-path="../android基础/android零散知识.html">
            
                <a href="../android基础/android零散知识.html">
            
                    
                    Android部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.12.1" data-path="../android基础/基础控件使用.html">
            
                <a href="../android基础/基础控件使用.html">
            
                    
                    基础控件使用
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.2" data-path="../android基础/android零散知识.html">
            
                <a href="../android基础/android零散知识.html">
            
                    
                    Android零散知识
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.3" data-path="../android基础/android坐标体系.html">
            
                <a href="../android基础/android坐标体系.html">
            
                    
                    Android坐标体系
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.4" data-path="../android基础/APP的启动流程.html">
            
                <a href="../android基础/APP的启动流程.html">
            
                    
                    APP启动流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.5" data-path="../android基础/View加载流程.html">
            
                <a href="../android基础/View加载流程.html">
            
                    
                    View加载流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.6" data-path="../android基础/事件分发机制.html">
            
                <a href="../android基础/事件分发机制.html">
            
                    
                    事件分发机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.7" data-path="../android基础/控件绘制流程.html">
            
                <a href="../android基础/控件绘制流程.html">
            
                    
                    控件绘制流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.8" data-path="../android基础/常用shape.html">
            
                <a href="../android基础/常用shape.html">
            
                    
                    常用shape
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.9" data-path="../android基础/进程通信.html">
            
                <a href="../android基础/进程通信.html">
            
                    
                    进程通信
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.10" data-path="../通信方式/通信方式详解.html">
            
                <a href="../通信方式/通信方式详解.html">
            
                    
                    通信方式详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.11" data-path="../android基础/Binder详解.html">
            
                <a href="../android基础/Binder详解.html">
            
                    
                    Binder详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.12" data-path="../android基础/Handler详解.html">
            
                <a href="../android基础/Handler详解.html">
            
                    
                    Handle详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.13" data-path="../android基础/Fragment详解.html">
            
                <a href="../android基础/Fragment详解.html">
            
                    
                    Fragment详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.14" data-path="../android基础/Activity详解.html">
            
                <a href="../android基础/Activity详解.html">
            
                    
                    Activity详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.15" data-path="../android基础/BroadcastReceiver.html">
            
                <a href="../android基础/BroadcastReceiver.html">
            
                    
                    BroadcastReceiver详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.16" data-path="../android基础/Service服务.html">
            
                <a href="../android基础/Service服务.html">
            
                    
                    Service详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.17" data-path="../android基础/动画详解.html">
            
                <a href="../android基础/动画详解.html">
            
                    
                    动画详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.18" data-path="../android基础/屏幕刷新机制.html">
            
                <a href="../android基础/屏幕刷新机制.html">
            
                    
                    屏幕刷新机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.19" data-path="../android基础/屏幕适配.html">
            
                <a href="../android基础/屏幕适配.html">
            
                    
                    屏幕适配
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.20" data-path="../android基础/图片加载详解.html">
            
                <a href="../android基础/图片加载详解.html">
            
                    
                    图片加载详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.21" data-path="../android基础/WebView详解.html">
            
                <a href="../android基础/WebView详解.html">
            
                    
                    WebView详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.22" data-path="../android基础/沉浸式.html">
            
                <a href="../android基础/沉浸式.html">
            
                    
                    沉浸式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.23" data-path="../android基础/相机模块.html">
            
                <a href="../android基础/相机模块.html">
            
                    
                    相机模块
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.24" data-path="../android基础/地图模块.html">
            
                <a href="../android基础/地图模块.html">
            
                    
                    地图模块
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.25" data-path="../android基础/Androidstudio插件开发.html">
            
                <a href="../android基础/Androidstudio插件开发.html">
            
                    
                    Androidstudio插件开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.26" data-path="../android基础/Apk插件化开发.html">
            
                <a href="../android基础/Apk插件化开发.html">
            
                    
                    Apk插件化开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.27" data-path="../android基础/App组件化开发.html">
            
                <a href="../android基础/App组件化开发.html">
            
                    
                    App组件化开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.28" data-path="../android基础/sdk开发.html">
            
                <a href="../android基础/sdk开发.html">
            
                    
                    sdk开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.29" data-path="../android基础/APP优化.html">
            
                <a href="../android基础/APP优化.html">
            
                    
                    APP优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.30" data-path="../android基础/项目参数配置.html">
            
                <a href="../android基础/项目参数配置.html">
            
                    
                    项目参数配置
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.31" data-path="../android基础/App发布.html">
            
                <a href="../android基础/App发布.html">
            
                    
                    App发布
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.32" data-path="../android基础/Android外挂.html">
            
                <a href="../android基础/Android外挂.html">
            
                    
                    Android外挂
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.33" data-path="../android基础/Android字节码插桩.html">
            
                <a href="../android基础/Android字节码插桩.html">
            
                    
                    Android字节码插桩
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.34" data-path="../android基础/智能家居.html">
            
                <a href="../android基础/智能家居.html">
            
                    
                    智能家居
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.13" data-path="../python/python基础.html">
            
                <a href="../python/python基础.html">
            
                    
                    python部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.13.1" data-path="../python/python基础.html">
            
                <a href="../python/python基础.html">
            
                    
                    python基础
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.13.2" data-path="../python/python爬虫.html">
            
                <a href="../python/python爬虫.html">
            
                    
                    python爬虫
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.14" data-path="../gradle/Groovy.html">
            
                <a href="../gradle/Groovy.html">
            
                    
                    Groovy
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.15" data-path="../kotlin/kotlin部分.html">
            
                <a href="../kotlin/kotlin部分.html">
            
                    
                    kotlin部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.16" data-path="../flutter/flutter部分.html">
            
                <a href="../flutter/flutter部分.html">
            
                    
                    flutter部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17" data-path="ccpp.html">
            
                <a href="ccpp.html">
            
                    
                    native部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.17.1" data-path="Linux.html">
            
                <a href="Linux.html">
            
                    
                    Linux
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.2" data-path="ccpp.html">
            
                <a href="ccpp.html">
            
                    
                    cCpp
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.3" data-path="NDK.html">
            
                <a href="NDK.html">
            
                    
                    NDK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.4" data-path="系统编译剪裁.html">
            
                <a href="系统编译剪裁.html">
            
                    
                    系统编译剪裁
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="1.17.5" data-path="音视频.html">
            
                <a href="音视频.html">
            
                    
                    音视频
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.6" data-path="音视频第三方库.html">
            
                <a href="音视频第三方库.html">
            
                    
                    音视频第三方库
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.7" data-path="相关代码.html">
            
                <a href="相关代码.html">
            
                    
                    相关代码
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.18" data-path="../server/服务器部分.html">
            
                <a href="../server/服务器部分.html">
            
                    
                    服务器部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.19" data-path="../webDev/web部分.html">
            
                <a href="../webDev/web部分.html">
            
                    
                    web部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.20" data-path="../人工智能/人工智能相关概念.html">
            
                <a href="../人工智能/人工智能相关概念.html">
            
                    
                    人工智能
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.21" data-path="../面试真题/极飞.html">
            
                <a href="../面试真题/极飞.html">
            
                    
                    面试真题
            
                </a>
            

            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            本书使用 GitBook 发布
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="../.." >音视频</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div class="search-plus" id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <div id="anchor-navigation-ex-navbar"><i class="fa fa-navicon"></i><ul><li><span class="title-icon "></span><a href="#aac&#x8BE6;&#x89E3;"><b>1. </b>AAC&#x8BE6;&#x89E3;</a></li><ul><li><span class="title-icon "></span><a href="#adts--audio-data-transport-stream"><b>1.1. </b>ADTS  (Audio Data Transport Stream)</a></li><li><span class="title-icon "></span><a href="#aac&#x6570;&#x636E;&#x6D41;&#x683C;&#x5F0F;"><b>1.2. </b>aac&#x6570;&#x636E;&#x6D41;&#x683C;&#x5F0F;</a></li><li><span class="title-icon "></span><a href="#adts-heads"><b>1.3. </b>ADTS Heads</a></li></ul><li><span class="title-icon "></span><a href="#h264"><b>2. </b>h264</a></li><ul><li><span class="title-icon "></span><a href="#h264&#x5E38;&#x7528;&#x7684;&#x5E27;&#x7C7B;&#x578B;"><b>2.1. </b>h264&#x5E38;&#x7528;&#x7684;&#x5E27;&#x7C7B;&#x578B;</a></li><li><span class="title-icon "></span><a href="#h264&#x67E5;&#x770B;&#x5DE5;&#x5177;"><b>2.2. </b>H264&#x67E5;&#x770B;&#x5DE5;&#x5177;</a></li><li><span class="title-icon "></span><a href="#java&#x5C42;&#x89E3;&#x7801;-&#x663E;&#x793A;-h264&#x65B9;&#x6848;"><b>2.3. </b>java&#x5C42;&#x89E3;&#x7801; &#x663E;&#x793A; H264&#x65B9;&#x6848;</a></li><li><span class="title-icon "></span><a href="#h264&#x8F6C;mp4---java&#x5B9E;&#x73B0;&#x65B9;&#x6848;"><b>2.4. </b>H264&#x8F6C;MP4   Java&#x5B9E;&#x73B0;&#x65B9;&#x6848;</a></li></ul><li><span class="title-icon "></span><a href="#rtmp"><b>3. </b>RTMP</a></li><li><span class="title-icon "></span><a href="#rtp"><b>4. </b>RTP</a></li><ul><li><span class="title-icon "></span><a href="#rtp&#x5C01;&#x5305;&#x60C5;&#x51B5;"><b>4.1. </b>RTP&#x5C01;&#x5305;&#x60C5;&#x51B5;</a></li><ul><li><span class="title-icon "></span><a href="#&#x5355;&#x4E2A;nal&#x5305;&#x5355;&#x5143;"><b>4.1.1. </b>&#x5355;&#x4E2A;NAL&#x5305;&#x5355;&#x5143;</a></li><li><span class="title-icon "></span><a href="#&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x6A21;&#x5F0F;"><b>4.1.2. </b>&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x6A21;&#x5F0F;</a></li><li><span class="title-icon "></span><a href="#fu-a&#x7684;&#x5206;&#x7247;&#x683C;&#x5F0F;"><b>4.1.3. </b>FU-A&#x7684;&#x5206;&#x7247;&#x683C;&#x5F0F;</a></li></ul><li><span class="title-icon "></span><a href="#rtp-&#x56FA;&#x5B9A;&#x5934;&#x7ED3;&#x6784;"><b>4.2. </b>RTP &#x56FA;&#x5B9A;&#x5934;&#x7ED3;&#x6784;</a></li><ul><li><span class="title-icon "></span><a href="#rtp&#x5934;&#x5B9A;&#x4E49;&#x8BF4;&#x660E;"><b>4.2.1. </b>RTP&#x5934;&#x5B9A;&#x4E49;&#x8BF4;&#x660E;</a></li></ul><li><span class="title-icon "></span><a href="#nalu&#x5934;-&#x3001;fu-indicator"><b>4.3. </b>NALU&#x5934; &#x3001;FU indicator</a></li><ul><li><span class="title-icon "></span><a href="#nalu&#x5934;-&#x3001;fu-indicator-&#x7ED3;&#x6784;"><b>4.3.1. </b>NALU&#x5934; &#x3001;FU indicator &#x7ED3;&#x6784;</a></li></ul><li><span class="title-icon "></span><a href="#fu-header"><b>4.4. </b>FU header</a></li><li><span class="title-icon "></span><a href="#&#x89E3;&#x6790;&#x793A;&#x4F8B;"><b>4.5. </b>&#x89E3;&#x6790;&#x793A;&#x4F8B;</a></li><li><span class="title-icon "></span><a href="#&#x4E2A;&#x4EBA;&#x7ECF;&#x9A8C;"><b>4.6. </b>&#x4E2A;&#x4EBA;&#x7ECF;&#x9A8C;</a></li></ul><li><span class="title-icon "></span><a href="#rtsp"><b>5. </b>rtsp</a></li><li><span class="title-icon "></span><a href="#rtsp-java-demo"><b>6. </b>rtsp Java demo</a></li><ul><li><span class="title-icon "></span><a href="#rtp&#x3001;rtsp&#x3001;rtcp&#x7684;&#x533A;&#x522B;"><b>6.1. </b>RTP&#x3001;RTSP&#x3001;RTCP&#x7684;&#x533A;&#x522B;</a></li><li><span class="title-icon "></span><a href="#rtsp-&#x7684;&#x4EA4;&#x4E92;&#x8FC7;&#x7A0B;-&#xFF08;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF09;"><b>6.2. </b>rtsp &#x7684;&#x4EA4;&#x4E92;&#x8FC7;&#x7A0B; &#xFF08;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#&#x642D;&#x5EFA;&#x3001;&#x6D4B;&#x8BD5;rtsp&#x4EA4;&#x4E92;"><b>6.3. </b>&#x642D;&#x5EFA;&#x3001;&#x6D4B;&#x8BD5;rtsp&#x4EA4;&#x4E92;</a></li><ul><li><span class="title-icon "></span><a href="#&#x91C7;&#x96C6;&#x3001;&#x63A8;&#x6D41;"><b>6.3.1. </b>&#x91C7;&#x96C6;&#x3001;&#x63A8;&#x6D41;</a></li><li><span class="title-icon "></span><a href="#&#x6D41;&#x5A92;&#x4F53;&#x670D;&#x52A1;&#x5668;"><b>6.3.2. </b>&#x6D41;&#x5A92;&#x4F53;&#x670D;&#x52A1;&#x5668;</a></li><li><span class="title-icon "></span><a href="#&#x89E3;&#x7801;&#x64AD;&#x653E;"><b>6.3.3. </b>&#x89E3;&#x7801;&#x64AD;&#x653E;</a></li></ul><li><span class="title-icon "></span><a href="#&#x89E3;rtsp&#x534F;&#x8BAE;&#x83B7;&#x5F97;h264-&#xFF0C;java&#x5B9E;&#x73B0;demo"><b>6.4. </b>&#x89E3;rtsp&#x534F;&#x8BAE;&#x83B7;&#x5F97;H264 &#xFF0C;java&#x5B9E;&#x73B0;demo</a></li><ul><li><span class="title-icon "></span><a href="#&#x4F7F;&#x7528;&#x65B9;&#x6CD5;"><b>6.4.1. </b>&#x4F7F;&#x7528;&#x65B9;&#x6CD5;</a></li></ul></ul><li><span class="title-icon "></span><a href="#yuv"><b>7. </b>YUV</a></li><ul><li><span class="title-icon "></span><a href="#yuv&#x6570;&#x636E;&#x7684;&#x91C7;&#x96C6;&#x65B9;&#x5F0F;"><b>7.1. </b>YUV&#x6570;&#x636E;&#x7684;&#x91C7;&#x96C6;&#x65B9;&#x5F0F;</a></li><li><span class="title-icon "></span><a href="#yuv&#x683C;&#x5F0F;&#x7C7B;&#x578B;"><b>7.2. </b>yuv&#x683C;&#x5F0F;&#x7C7B;&#x578B;</a></li></ul><li><span class="title-icon "></span><a href="#&#x97F3;&#x89C6;&#x9891;-&#x5F00;&#x53D1;&#x8981;&#x70B9;"><b>8. </b>&#x97F3;&#x89C6;&#x9891; &#x5F00;&#x53D1;&#x8981;&#x70B9;</a></li><ul><li><span class="title-icon "></span><a href="#&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x4E3B;&#x8981;&#x5185;&#x5BB9;"><b>8.1. </b>&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x4E3B;&#x8981;&#x5185;&#x5BB9;</a></li><li><span class="title-icon "></span><a href="#&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x5EF6;&#x65F6;&#x6807;&#x51C6;"><b>8.2. </b>&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x5EF6;&#x65F6;&#x6807;&#x51C6;</a></li><li><span class="title-icon "></span><a href="#&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x96BE;&#x70B9;"><b>8.3. </b>&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x96BE;&#x70B9;</a></li><ul><li><span class="title-icon "></span><a href="#&#x5E38;&#x7528;&#x663E;&#x793A;&#x63A7;&#x4EF6;"><b>8.3.1. </b>&#x5E38;&#x7528;&#x663E;&#x793A;&#x63A7;&#x4EF6;</a></li></ul><li><span class="title-icon "></span><a href="#&#x97F3;&#x89C6;&#x9891;&#x672F;&#x8BED;"><b>8.4. </b>&#x97F3;&#x89C6;&#x9891;&#x672F;&#x8BED;</a></li><ul><li><span class="title-icon "></span><a href="#&#x91C7;&#x6837;&#x7387;&#xFF08;samplerate&#xFF09;"><b>8.4.1. </b>&#x91C7;&#x6837;&#x7387;&#xFF08;samplerate&#xFF09;</a></li><li><span class="title-icon "></span><a href="#&#x91CF;&#x5316;&#x7CBE;&#x5EA6;&#xFF08;&#x4F4D;&#x5BBD;&#xFF09;"><b>8.4.2. </b>&#x91CF;&#x5316;&#x7CBE;&#x5EA6;&#xFF08;&#x4F4D;&#x5BBD;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#&#x590D;&#x7528;&#x89E3;&#x590D;&#x7528;&#xFF1A;"><b>8.4.3. </b>&#x590D;&#x7528;/&#x89E3;&#x590D;&#x7528;&#xFF1A;</a></li><li><span class="title-icon "></span><a href="#&#x58F0;&#x9053;&#x6570;&#xFF08;channels&#xFF09;"><b>8.4.4. </b>&#x58F0;&#x9053;&#x6570;&#xFF08;channels&#xFF09;</a></li><li><span class="title-icon "></span><a href="#&#x91CD;&#x91C7;&#x6837;"><b>8.4.5. </b>&#x91CD;&#x91C7;&#x6837;</a></li><li><span class="title-icon "></span><a href="#&#x58F0;&#x9053;&#x5E03;&#x5C40;"><b>8.4.6. </b>&#x58F0;&#x9053;&#x5E03;&#x5C40;</a></li><li><span class="title-icon "></span><a href="#&#x97F3;&#x9891;&#x5E27;"><b>8.4.7. </b>&#x97F3;&#x9891;&#x5E27;</a></li><li><span class="title-icon "></span><a href="#&#x97F3;&#x8C03;-&#x3001;&#x97F3;&#x901F;"><b>8.4.8. </b>&#x97F3;&#x8C03; &#x3001;&#x97F3;&#x901F;</a></li><li><span class="title-icon "></span><a href="#&#x89E3;&#x534F;&#x8BAE;"><b>8.4.9. </b>&#x89E3;&#x534F;&#x8BAE;</a></li><li><span class="title-icon "></span><a href="#&#x89E3;&#x5C01;&#x88C5;"><b>8.4.10. </b>&#x89E3;&#x5C01;&#x88C5;</a></li><li><span class="title-icon "></span><a href="#&#x89E3;&#x7801;"><b>8.4.11. </b>&#x89E3;&#x7801;</a></li><li><span class="title-icon "></span><a href="#&#x89C6;&#x97F3;&#x9891;&#x540C;&#x6B65;"><b>8.4.12. </b>&#x89C6;&#x97F3;&#x9891;&#x540C;&#x6B65;</a></li><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x6296;&#x52A8;"><b>8.4.13. </b>&#x7F51;&#x7EDC;&#x6296;&#x52A8;</a></li><li><span class="title-icon "></span><a href="#mtu"><b>8.4.14. </b>MTU</a></li><li><span class="title-icon "></span><a href="#i&#x5E27;"><b>8.4.15. </b>I&#x5E27;</a></li><li><span class="title-icon "></span><a href="#p&#x5E27;-&#x3001;&#x5DEE;&#x522B;&#x5E27;"><b>8.4.16. </b>P&#x5E27; &#x3001;&#x5DEE;&#x522B;&#x5E27;</a></li><li><span class="title-icon "></span><a href="#b&#x5E27;-&#x3001;&#x53CC;&#x5411;&#x5DEE;&#x522B;&#x5E27;"><b>8.4.17. </b>B&#x5E27; &#x3001;&#x53CC;&#x5411;&#x5DEE;&#x522B;&#x5E27;</a></li></ul><li><span class="title-icon "></span><a href="#&#x97F3;&#x89C6;&#x9891;&#x683C;&#x5F0F;"><b>8.5. </b>&#x97F3;&#x89C6;&#x9891;&#x683C;&#x5F0F;</a></li><ul><li><span class="title-icon "></span><a href="#&#x97F3;&#x9891;&#x683C;&#x5F0F;&#x76F8;&#x5173;"><b>8.5.1. </b>&#x97F3;&#x9891;&#x683C;&#x5F0F;&#x76F8;&#x5173;</a></li><li><span class="title-icon "></span><a href="#&#x5F53;&#x524D;&#x4E3B;&#x8981;&#x7684;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;"><b>8.5.2. </b>&#x5F53;&#x524D;&#x4E3B;&#x8981;&#x7684;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;</a></li><li><span class="title-icon "></span><a href="#&#x89C6;&#x9891;&#x5C01;&#x88C5;&#x683C;&#x5F0F;"><b>8.5.3. </b>&#x89C6;&#x9891;&#x5C01;&#x88C5;&#x683C;&#x5F0F;</a></li><li><span class="title-icon "></span><a href="#&#x89C6;&#x9891;&#x7F16;&#x7801;&#x683C;&#x5F0F;"><b>8.5.4. </b>&#x89C6;&#x9891;&#x7F16;&#x7801;&#x683C;&#x5F0F;</a></li></ul><li><span class="title-icon "></span><a href="#wav&#x6587;&#x4EF6;&#x683C;&#x5F0F;"><b>8.6. </b>wav&#x6587;&#x4EF6;&#x683C;&#x5F0F;</a></li></ul></ul></div><a href="#aac&#x8BE6;&#x89E3;" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a><h1 id="aac&#x8BE6;&#x89E3;"><a name="aac&#x8BE6;&#x89E3;" class="anchor-navigation-ex-anchor" href="#aac&#x8BE6;&#x89E3;"><i class="fa fa-link" aria-hidden="true"></i></a>1. AAC&#x8BE6;&#x89E3;</h1>
<h2 id="adts--audio-data-transport-stream"><a name="adts--audio-data-transport-stream" class="anchor-navigation-ex-anchor" href="#adts--audio-data-transport-stream"><i class="fa fa-link" aria-hidden="true"></i></a>1.1. ADTS  (Audio Data Transport Stream)</h2>
<pre><code class="lang-text">&#x6709;&#x7684;&#x65F6;&#x5019;&#x5F53;&#x4F60;&#x7F16;&#x7801;AAC&#x88F8;&#x6D41;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F1A;&#x9047;&#x5230;&#x5199;&#x51FA;&#x6765;&#x7684;AAC&#x6587;&#x4EF6;&#x5E76;&#x4E0D;&#x80FD;&#x64AD;&#x653E;&#xFF0C;
&#x5F88;&#x5927;&#x7684;&#x53EF;&#x80FD;&#x5C31;&#x662F;AAC&#x6587;&#x4EF6;&#x7684;&#x6BCF;&#x4E00;&#x5E27;&#x91CC;&#x7F3A;&#x5C11;&#x4E86;ADTS&#x5934;&#x4FE1;&#x606F;&#x6587;&#x4EF6;&#x7684;&#x5305;&#x88C5;&#x62FC;&#x63A5;&#x3002;
&#x53EA;&#x9700;&#x8981;&#x52A0;&#x5165;&#x5934;&#x6587;&#x4EF6;ADTS&#x5373;&#x53EF;&#x3002;
</code></pre>
<h2 id="aac&#x6570;&#x636E;&#x6D41;&#x683C;&#x5F0F;"><a name="aac&#x6570;&#x636E;&#x6D41;&#x683C;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#aac&#x6570;&#x636E;&#x6D41;&#x683C;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>1.2. aac&#x6570;&#x636E;&#x6D41;&#x683C;&#x5F0F;</h2>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/201808141719_osChina_AAC&#x6570;&#x636E;&#x6D41;&#x683C;&#x5F0F;.png" alt=""></p>
<pre><code class="lang-text">AAC ES : Elementary Streams (&#x539F;&#x59CB;&#x6D41;)
</code></pre>
<h2 id="adts-heads"><a name="adts-heads" class="anchor-navigation-ex-anchor" href="#adts-heads"><i class="fa fa-link" aria-hidden="true"></i></a>1.3. ADTS Heads</h2>
<pre><code class="lang-text">ADTS&#x7684;&#x5934;&#x4FE1;&#x606F;&#x90FD;&#x662F;7&#x4E2A;&#x5B57;&#x8282;&#xFF0C;&#x5206;&#x4E3A;2&#x90E8;&#x5206;&#xFF1A;
adts_fixed_header(); // 28bit
adts_variable_header(); // 28bit
</code></pre>
<table>
<thead>
<tr>
<th>adts_fixed_header&#x7684;&#x5B57;&#x6BB5;</th>
<th>&#x5360;&#x7528;bit&#x6570;</th>
<th>&#x610F;&#x4E49;</th>
</tr>
</thead>
<tbody>
<tr>
<td>syncword</td>
<td>12</td>
<td>&#x540C;&#x6B65;&#x5934; &#x603B;&#x662F;0xFFF &#x3002;&#x4EE3;&#x8868;&#x7740;&#x4E00;&#x4E2A;ADTS&#x5E27;&#x7684;&#x5F00;&#x59CB;</td>
</tr>
<tr>
<td>ID</td>
<td>1</td>
<td>MPEG Version <br>0 &#x4EE3;&#x8868; MPEG-4, 1&#x4EE3;&#x8868; MPEG-2</td>
</tr>
<tr>
<td>Layer</td>
<td>2</td>
<td>always: &apos;00&apos;</td>
</tr>
<tr>
<td>protection_absent</td>
<td>1</td>
<td>Warning, 1:&#x6CA1;&#x6709;CRC , 0:&#x6709;CRC</td>
</tr>
<tr>
<td>profile</td>
<td>2</td>
<td>&#x4F7F;&#x7528;&#x7684;AAC&#x7EA7;&#x522B; <br> 0: main profile  <br>1:low complexity profile (LC)  <br>2: scalable sampling rate profile (SSR)  <br>3:&#x4FDD;&#x7559;&#x5B57;&#x6BB5; reserved</td>
</tr>
<tr>
<td>sampling_frequency_index</td>
<td>4</td>
<td>&#x4F7F;&#x7528;&#x7684;&#x91C7;&#x6837;&#x7387;&#x4E0B;&#x6807;<br>// &#x4E0B;&#x6807;&#x5BF9;&#x5E94; &#x7684;&#x91C7;&#x6837;&#x7387; <br>0: 96000 Hz <br>1: 88200 Hz <br>2: 64000 Hz <br>3: 48000 Hz <br>4: 44100 Hz <br>5: 32000 Hz <br>6: 24000 Hz <br>7: 22050 Hz <br>8: 16000 Hz <br>9: 12000 Hz <br>10: 11025 Hz <br>11: 8000 Hz <br>12: 7350 Hz <br>13: Reserved <br>14: Reserved <br>15: frequency is written explictly</td>
</tr>
<tr>
<td>private_bit</td>
<td>1</td>
<td>&#x56FA;&#x5B9A;&#x4E3A;0</td>
</tr>
<tr>
<td>channel_configuration</td>
<td>3</td>
<td>&#x58F0;&#x9053;&#x6570;<br>0: Defined in AOT Specifc Config <br>1: 1 &#x58F0;&#x9053;: front-center <br>2: 2 &#x58F0;&#x9053;: front-left, front-right <br>3: 3 &#x58F0;&#x9053;: front-center, front-left, front-right <br>4: 4 &#x58F0;&#x9053;: front-center, front-left, front-right, <br> back-center <br>5: 5 &#x58F0;&#x9053;: front-center, front-left, front-right,  <br>back-left, back-right <br>6: 6 &#x58F0;&#x9053;: front-center, front-left, front-right,  <br>back-left, back-right, LFE-channel <br>7: 8 &#x58F0;&#x9053;: front-center, front-left, front-right,  <br>side-left, side-right, back-left,  <br>back-right, LFE-channel <br>8-15: &#x4FDD;&#x7559;Reserved</td>
</tr>
<tr>
<td>original_copy</td>
<td>1</td>
<td>&#x56FA;&#x5B9A;&#x4E3A;0</td>
</tr>
<tr>
<td>home</td>
<td>1</td>
<td>&#x56FA;&#x5B9A;&#x4E3A;0</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>adts_variable_header&#x7684;&#x5B57;&#x6BB5;</th>
<th>&#x5360;&#x7528;bit&#x6570;</th>
<th>&#x610F;&#x4E49;</th>
</tr>
</thead>
<tbody>
<tr>
<td>copyright_identification_bit</td>
<td>1</td>
<td>&#x56FA;&#x5B9A;&#x4E3A;0</td>
</tr>
<tr>
<td>copyright_identification_star</td>
<td>1</td>
<td>&#x56FA;&#x5B9A;&#x4E3A;0</td>
</tr>
<tr>
<td>aac_frame_length</td>
<td>13</td>
<td>&#x4E00;&#x4E2A;ADTS&#x5E27;&#x7684;&#x957F;&#x5EA6;&#x5305;&#x62EC;ADTS&#x5934;&#x548C;raw data block</td>
</tr>
<tr>
<td>adts_buffer_fullness</td>
<td>11</td>
<td>&#x56FA;&#x5B9A;&#x4E3A;0x7ff ,&#x8BF4;&#x660E;&#x662F;&#x7801;&#x7387;&#x53EF;&#x53D8;&#x7684;&#x7801;&#x6D41;</td>
</tr>
<tr>
<td>number_of_raw_data_blocks_in_frame</td>
<td>2</td>
<td>&#x56FA;&#x5B9A;&#x4E3A;00 &#x3002;&#x8868;&#x793A;ADTS&#x5E27;&#x4E2D;&#x6709;1&#x4E2A;AAC&#x6570;&#x636E;&#x5757; <br>&#xFF08;&#x6CE8;&#x610F;&#xFF1A;&#x4E0D;&#x662F;&#x6CA1;&#x6709;AAC&#x6570;&#x636E;&#x5757;&#xFF09;</td>
</tr>
</tbody>
</table>
<h1 id="h264"><a name="h264" class="anchor-navigation-ex-anchor" href="#h264"><i class="fa fa-link" aria-hidden="true"></i></a>2. h264</h1>
<pre><code class="lang-text">1&#x3001;&#x4ECE;4.1.2&#x5F00;&#x59CB;&#x652F;&#x6301;java&#x5C42;&#x7684;mediacodec
2&#x3001;&#x4ECE;5.0&#x5F00;&#x59CB;&#x652F;&#x6301; native&#x5C42;&#x7684;mediacodec
</code></pre>
<h2 id="h264&#x5E38;&#x7528;&#x7684;&#x5E27;&#x7C7B;&#x578B;"><a name="h264&#x5E38;&#x7528;&#x7684;&#x5E27;&#x7C7B;&#x578B;" class="anchor-navigation-ex-anchor" href="#h264&#x5E38;&#x7528;&#x7684;&#x5E27;&#x7C7B;&#x578B;"><i class="fa fa-link" aria-hidden="true"></i></a>2.1. h264&#x5E38;&#x7528;&#x7684;&#x5E27;&#x7C7B;&#x578B;</h2>
<table>
<thead>
<tr>
<th>&#x7C7B;&#x578B;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>00 00 00 01 06</td>
<td>&#x589E;&#x5F3A; &#x5E27;</td>
</tr>
<tr>
<td>00 00 00 01 41</td>
<td>61&#x548C;41&#x5176;&#x5B9E;&#x90FD;&#x662F;P&#x5E27;&#xFF08;type&#x503C;&#x4E3A;1&#xFF09;&#xFF0C;&#x53EA;&#x662F;&#x91CD;&#x8981;&#x7EA7;&#x522B;&#x4E0D;&#x4E00;&#x6837;</td>
</tr>
<tr>
<td>00 00 00 01 61</td>
<td>P&#x5E27;</td>
</tr>
<tr>
<td>00 00 00 01 65</td>
<td>IDR &#x3001;I&#x5E27;</td>
</tr>
<tr>
<td>00 00 00 01 67</td>
<td>SPS</td>
</tr>
<tr>
<td>00 00 00 01 68</td>
<td>PPS</td>
</tr>
</tbody>
</table>
<h2 id="h264&#x67E5;&#x770B;&#x5DE5;&#x5177;"><a name="h264&#x67E5;&#x770B;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#h264&#x67E5;&#x770B;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>2.2. H264&#x67E5;&#x770B;&#x5DE5;&#x5177;</h2>
<p>&#x4EE5;&#x4E8C;&#x8FDB;&#x5236;&#x65B9;&#x5F0F;&#x67E5;&#x770B;H264&#x6587;&#x4EF6;&#x7684;&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x7528; <a href="http://www.sublimetext.com/" target="_blank">sublime_text</a></p>
<p>&#x4EE5;&#x56FE;&#x5F62;&#x5316;&#x65B9;&#x5F0F;&#x67E5;&#x770B;H264&#x6587;&#x4EF6;&#x7684;I&#x5E27;P&#x5E27;&#x7B49;&#x53EF;&#x4EE5;&#x7528;<a href="http://opbrnhxqg.bkt.clouddn.com/Elecard-h264%E6%96%87%E4%BB%B6%E6%9F%A5%E7%9C%8B%E5%99%A8%E6%92%AD%E6%94%BE%E5%99%A8.rar" target="_blank">Elecard StreamEye </a></p>
<h2 id="java&#x5C42;&#x89E3;&#x7801;-&#x663E;&#x793A;-h264&#x65B9;&#x6848;"><a name="java&#x5C42;&#x89E3;&#x7801;-&#x663E;&#x793A;-h264&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#java&#x5C42;&#x89E3;&#x7801;-&#x663E;&#x793A;-h264&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>2.3. java&#x5C42;&#x89E3;&#x7801; &#x663E;&#x793A; H264&#x65B9;&#x6848;</h2>
<pre><code class="lang-text">&#x81EA;&#x5DF1;&#x89E3;&#x6790; H264&#x534F;&#x8BAE;&#xFF0C;&#x7136;&#x540E;&#x5C06;&#x6570;&#x636E;&#x4F5C;&#x4E3A;&#x4E00;&#x5E27;&#x4E00;&#x5E27;&#x5730;&#x9001;&#x7ED9; java&#x5C42;&#x7684; mediacodec &#x89E3;&#x7801; &#x3002;
&#x7136;&#x540E;&#x7ED9; mediacodec &#x8FDB;&#x884C;&#x6E32;&#x67D3;&#x663E;&#x793A; &#x3002;
</code></pre>
<pre><code class="lang-text">/**
 @param surface Specify a surface on which to render the output of this
                decoder. Pass {@code null} as {@code surface} if the
                codec does not generate raw video output (e.g. not a video
                decoder) and/or if you want to configure the codec for
                {@link ByteBuffer} output.
*/
 mMeidaCodec.configure(mediaFormat, mSurfaceView.getHolder().getSurface(), null, 0);
</code></pre>
<h2 id="h264&#x8F6C;mp4---java&#x5B9E;&#x73B0;&#x65B9;&#x6848;"><a name="h264&#x8F6C;mp4---java&#x5B9E;&#x73B0;&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#h264&#x8F6C;mp4---java&#x5B9E;&#x73B0;&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>2.4. H264&#x8F6C;MP4   Java&#x5B9E;&#x73B0;&#x65B9;&#x6848;</h2>
<p>&#x57FA;&#x4E8E;<a href="https://github.com/sannies/mp4parser" target="_blank">mp4parser</a>  &#xFF08; isoviewer-1.0-RC-35.jar&#xFF09;&#x5B9E;&#x73B0;&#x3002;</p>
<pre><code class="lang-text">/**
  &#x6B64;&#x65B9;&#x6848;&#x9047;&#x5230;Bug :
  Attempt to read from field &apos;boolean com.googlecode.mp4parser.
  h264.model.SeqParameterSet.residual_color_transform_flag&apos; on
  a null object reference
  &#x89E3;&#x51B3;&#x529E;&#x6CD5;:&#x5728;&#x6211;&#x7684;&#x5E94;&#x7528;&#x573A;&#x666F;&#x4E2D;&#xFF0C;&#x6211;&#x662F;&#x786E;&#x4FDD;H264&#x7684;&#x5934;&#x90E8;&#x4FDD;&#x5B58;&#x4E86;SPS &#x548C; PPS .
  &#x9274;&#x4E8E;&#x8F6C;&#x6362;&#x901F;&#x5EA6;&#x548C;&#x6B64;Bug &#x6211;&#x540E;&#x6765;&#x653E;&#x5F03;&#x4E86;&#x8FD9;&#x4E2A;&#x65B9;&#x6848;&#xFF0C;&#x8F6C;&#x7528; C&#x5C42;&#x4F7F;&#x7528;ffmpeg&#x7684;&#x65B9;&#x6848;&#x3002;
 * @param h264Path  h264&#x6587;&#x4EF6;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;
 * @param mp4Path  mp4&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;
 * @return  &#x662F;&#x5426;&#x8F6C;&#x7801;&#x6210;&#x529F;
 */
@Deprecated
public static boolean  h264ToMp4Parse(String h264Path , String mp4Path ){
    try {
        H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl(h264Path));
        Movie movie = new Movie();
        movie.addTrack(h264Track);
        Container mp4file = new DefaultMp4Builder().build(movie);
        FileChannel fc = new FileOutputStream(new File(mp4Path)).getChannel();
        mp4file.writeContainer(fc);
        fc.close();
        return  true ;
    }catch (Exception exception){
        //&#x8F6C;&#x7801;&#x5F02;&#x5E38;
        return  false ;
    }
}//
</code></pre>
<h1 id="rtmp"><a name="rtmp" class="anchor-navigation-ex-anchor" href="#rtmp"><i class="fa fa-link" aria-hidden="true"></i></a>3. RTMP</h1>
<p>RTMP&#xFF08;Real Time Messaging Protocol&#xFF09; &#x662F;Adobe&#x7684;&#x79C1;&#x6709;&#x534F;&#x8BAE;,&#x672A;&#x5B8C;&#x5168;&#x516C;&#x5F00;&#x3002;&#x57FA;&#x4E8E;TCP&#x534F;&#x8BAE; &#x3002;</p>
<pre><code class="lang-text">&#x4E3A;&#x4EC0;&#x4E48;&#x7F51;&#x7EDC;&#x76F4;&#x64AD;&#x4E00;&#x822C;&#x91C7;&#x7528; rtmp &#x800C;&#x5B89;&#x9632;&#x7B49;&#x91C7;&#x7528; RTSP &#xFF1F;
&#x56E0;&#x4E3A;Adobe&#x7684;flash&#x4E00;&#x7EDF;&#x5929;&#x4E0B;&#x7684;&#x65F6;&#x5019;&#xFF0C;RTMP&#x662F;web&#x5E73;&#x53F0;&#x7684;&#x76F4;&#x64AD;&#x552F;&#x4E00;&#x65B9;&#x6848;&#x3002;
&#x5404;&#x5927;CDN&#x5382;&#x5546;&#x4ED8;&#x51FA;&#x4E86;&#x8F83;&#x591A;&#x7684;&#x52AA;&#x529B;&#x5B9E;&#x73B0;&#x4E86;&#x5BF9;RTMP&#x6BD4;&#x8F83;&#x7A33;&#x5B9A;&#x7684;&#x652F;&#x6301;&#x3002;
&#x540E;&#x7EED;&#x7684;&#x516C;&#x53F8;&#x4E3A;&#x4E86;&#x7A33;&#x5B9A;&#x4F1A;&#x7EE7;&#x7EED;&#x6CBF;&#x7528;&#x3002;  
&#x540C;&#x7406;&#x5B89;&#x9632;&#x65B9;&#x9762;&#x5F88;&#x591A;&#x7A0B;&#x5E8F;&#x90FD;&#x662F;&#x57FA;&#x4E8E;RTSP&#xFF0C;&#x56E0;&#x4E3A;&#x751F;&#x6001;&#x4E5F;&#x7EE7;&#x7EED;&#x6CBF;&#x7528;&#x3002;
</code></pre>
<h1 id="rtp"><a name="rtp" class="anchor-navigation-ex-anchor" href="#rtp"><i class="fa fa-link" aria-hidden="true"></i></a>4. RTP</h1>
<h2 id="rtp&#x5C01;&#x5305;&#x60C5;&#x51B5;"><a name="rtp&#x5C01;&#x5305;&#x60C5;&#x51B5;" class="anchor-navigation-ex-anchor" href="#rtp&#x5C01;&#x5305;&#x60C5;&#x51B5;"><i class="fa fa-link" aria-hidden="true"></i></a>4.1. RTP&#x5C01;&#x5305;&#x60C5;&#x51B5;</h2>
<h3 id="&#x5355;&#x4E2A;nal&#x5305;&#x5355;&#x5143;"><a name="&#x5355;&#x4E2A;nal&#x5305;&#x5355;&#x5143;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x4E2A;nal&#x5305;&#x5355;&#x5143;"><i class="fa fa-link" aria-hidden="true"></i></a>4.1.1. &#x5355;&#x4E2A;NAL&#x5305;&#x5355;&#x5143;</h3>
<p>&#x5BF9;&#x4E8E; NALU &#x7684;&#x957F;&#x5EA6;&#x5C0F;&#x4E8E; MTU &#x5927;&#x5C0F;&#x7684;&#x5305;, &#x4E00;&#x822C;&#x91C7;&#x7528;&#x5355;&#x4E00; NAL &#x5355;&#x5143;&#x6A21;&#x5F0F;.</p>
<h3 id="&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x6A21;&#x5F0F;"><a name="&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x6A21;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x6A21;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>4.1.2. &#x7EC4;&#x5408;&#x5C01;&#x5305;&#x6A21;&#x5F0F;</h3>
<p>&#x5F53; NALU &#x7684;&#x957F;&#x5EA6;&#x7279;&#x522B;&#x5C0F;&#x65F6;, &#x53EF;&#x4EE5;&#x628A;&#x51E0;&#x4E2A; NALU &#x5355;&#x5143;&#x5C01;&#x5728;&#x4E00;&#x4E2A; RTP &#x5305;&#x4E2D;. &#xFF08;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x7528;&#x7684;&#x5C11;&#xFF09;</p>
<h3 id="fu-a&#x7684;&#x5206;&#x7247;&#x683C;&#x5F0F;"><a name="fu-a&#x7684;&#x5206;&#x7247;&#x683C;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#fu-a&#x7684;&#x5206;&#x7247;&#x683C;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>4.1.3. FU-A&#x7684;&#x5206;&#x7247;&#x683C;&#x5F0F;</h3>
<p>&#x800C;&#x5F53; NALU &#x7684;&#x957F;&#x5EA6;&#x8D85;&#x8FC7; MTU &#x65F6;, &#x5C31;&#x5FC5;&#x987B;&#x5BF9; NALU &#x5355;&#x5143;&#x8FDB;&#x884C;&#x5206;&#x7247;&#x5C01;&#x5305;. &#x4E5F;&#x79F0;&#x4E3A; Fragmentation Units (FUs).
&#x73B0;&#x5B58;&#x4E24;&#x4E2A;&#x7248;&#x672C;FU-A&#xFF0C;FU-B&#x3002;</p>
<h2 id="rtp-&#x56FA;&#x5B9A;&#x5934;&#x7ED3;&#x6784;"><a name="rtp-&#x56FA;&#x5B9A;&#x5934;&#x7ED3;&#x6784;" class="anchor-navigation-ex-anchor" href="#rtp-&#x56FA;&#x5B9A;&#x5934;&#x7ED3;&#x6784;"><i class="fa fa-link" aria-hidden="true"></i></a>4.2. RTP &#x56FA;&#x5B9A;&#x5934;&#x7ED3;&#x6784;</h2>
<p>&#x524D; 12 &#xFF08;&#x7B2C;&#x4E00;&#x6392;4&#x4E2A;byte +&#x7B2C;&#x4E8C;&#x6392; 4byte +&#x7B2C;&#x4E09;&#x6392; 4byte &#xFF09;&#x4E2A;&#x5B57;&#x8282;&#x51FA;&#x73B0;&#x5728;&#x6BCF;&#x4E2A; RTP &#x5305;&#x4E2D;&#x3002;&#x4EC5;&#x4EC5;&#x5728;&#x88AB;&#x6DF7;&#x5408;&#x5668;&#x63D2;&#x5165;&#x65F6;&#xFF0C;&#x624D;&#x51FA;&#x73B0; CSRC &#x8BC6;&#x522B;&#x7B26;&#x5217;&#x8868;&#x3002;&#xFF08;&#x5982;&#x679C;CC&#x4E3A;0&#xFF0C;&#x5C31;&#x4EE3;&#x8868;&#x6CA1;&#x6709;CSRC&#xFF09;
<img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/wkDrone_p1.png" alt=""></p>
<h3 id="rtp&#x5934;&#x5B9A;&#x4E49;&#x8BF4;&#x660E;"><a name="rtp&#x5934;&#x5B9A;&#x4E49;&#x8BF4;&#x660E;" class="anchor-navigation-ex-anchor" href="#rtp&#x5934;&#x5B9A;&#x4E49;&#x8BF4;&#x660E;"><i class="fa fa-link" aria-hidden="true"></i></a>4.2.1. RTP&#x5934;&#x5B9A;&#x4E49;&#x8BF4;&#x660E;</h3>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/wkDrone_p2.png" alt="p"></p>
<h2 id="nalu&#x5934;-&#x3001;fu-indicator"><a name="nalu&#x5934;-&#x3001;fu-indicator" class="anchor-navigation-ex-anchor" href="#nalu&#x5934;-&#x3001;fu-indicator"><i class="fa fa-link" aria-hidden="true"></i></a>4.3. NALU&#x5934; &#x3001;FU indicator</h2>
<pre><code class="lang-text">&#x4E2A;&#x4EBA;&#x7406;&#x89E3; NALU&#x5934;&#x548C; FU indicator&#x5DEE;&#x4E0D;&#x591A; &#x3002;
&#x5728;&#x5355;&#x4E2A;&#x5C01;&#x5305;&#x6A21;&#x5F0F;&#x4E0B; RTP&#x5934;&#x540E;&#x9762;&#x8DDF;&#x7740;&#x5C31;&#x662F;NALU&#x5934;&#xFF1B;&#x5728;&#x5206;&#x7247;&#x5C01;&#x5305;&#x6A21;&#x5F0F;&#x4E0B;&#xFF0C;RTP&#x5934;&#x540E;&#x9762;&#x8DDF;&#x7740;&#x7684;&#x5C31;&#x662F;FU indicator&#x3002;
NALU&#x5934;&#x548C; FU indicator&#x7ED3;&#x6784;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x53EA;&#x662F;Type(&#x540E;&#x4E94;&#x4E2A;bit)&#x5BF9;&#x5E94;&#x7684;&#x610F;&#x4E49;&#x4E0D;&#x4E00;&#x6837;&#x3002;
</code></pre>
<h3 id="nalu&#x5934;-&#x3001;fu-indicator-&#x7ED3;&#x6784;"><a name="nalu&#x5934;-&#x3001;fu-indicator-&#x7ED3;&#x6784;" class="anchor-navigation-ex-anchor" href="#nalu&#x5934;-&#x3001;fu-indicator-&#x7ED3;&#x6784;"><i class="fa fa-link" aria-hidden="true"></i></a>4.3.1. NALU&#x5934; &#x3001;FU indicator &#x7ED3;&#x6784;</h3>
<p>&#x7531;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#x7EC4;&#x6210;
<img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/wkDrone_p3.png" alt="p"></p>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/wkDrone_p4.png" alt="p"></p>
<h2 id="fu-header"><a name="fu-header" class="anchor-navigation-ex-anchor" href="#fu-header"><i class="fa fa-link" aria-hidden="true"></i></a>4.4. FU header</h2>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/wkDrone_p5.png" alt="p">
<img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/wkDrone_p6.png" alt="p"></p>
<h2 id="&#x89E3;&#x6790;&#x793A;&#x4F8B;"><a name="&#x89E3;&#x6790;&#x793A;&#x4F8B;" class="anchor-navigation-ex-anchor" href="#&#x89E3;&#x6790;&#x793A;&#x4F8B;"><i class="fa fa-link" aria-hidden="true"></i></a>4.5. &#x89E3;&#x6790;&#x793A;&#x4F8B;</h2>
<pre><code class="lang-text">WkDrone&#x9879;&#x76EE;&#x7528;&#x5230;&#x7684;&#x662F; &#x5355;&#x4E2A;NAL&#x5305;&#x5355;&#x5143;&#x5C01;&#x88C5;+ FUA&#x5206;&#x7247;&#x5C01;&#x88C5;&#x6A21;&#x5F0F;&#x3002;&#x6240;&#x4EE5;&#x4EE5;&#x6B64;&#x4E3A;&#x4F8B;&#x8FDB;&#x884C;&#x5206;&#x6790; &#x3002;
1&#x3001;&#x5BA2;&#x6237;&#x7AEF;&#x6BCF;&#x6B21;&#x4ECE;&#x670D;&#x52A1;&#x5668;&#x63A5;&#x6536;&#x4E00;&#x4E2A;RTP&#x5305; &#x3002;
RTP&#x5934; + &#x6570;&#x636E;data

2&#x3001;&#x6839;&#x636E;data[0] &#x5224;&#x65AD;&#x662F;&#x4EC0;&#x4E48;&#x5C01;&#x5305;&#x6A21;&#x5F0F;&#x3002;

3&#x3001;&#x5982;&#x679C;&#x662F;&#x5355;&#x4E2A;NAL &#x5C31;&#x76F4;&#x63A5;&#x5224;&#x65AD;&#x62FF;&#x5230;&#x6574;&#x4E2A;NALU.
&#x5982;&#x679C;&#x662F;FU_A&#x6A21;&#x5F0F; &#x5C31;&#x6839;&#x636E;data[1]&#x5224;&#x65AD;&#x662F;&#x5F53;&#x524D;NALU&#x5355;&#x5143;&#x662F;&#x5426;&#x5F00;&#x59CB;&#x3001;&#x7ED3;&#x675F;&#x8FD8;&#x662F;&#x4E2D;&#x95F4;&#x3002;
&#x5982;&#x679C;&#x662F;&#x5F00;&#x5934;&#x5C31;&#x9700;&#x8981;&#x5728;&#x5F00;&#x59CB;&#x63A5;&#x6536;&#x524D;&#x624B;&#x52A8;&#x6DFB;&#x52A0;&#x5F53;&#x524D;NALU&#x7C7B;&#x578B;&#xFF08;rtpPackage.data[0] &amp; 0xE0)|(rtpPackage.data[1]&amp;0x1F) --&gt;
&#x6700;&#x540E;&#x83B7;&#x5F97;F &#x3001;NRI &#x3001;Type &#x8FD9;&#x4E09;&#x4E2A;&#x4FE1;&#x606F; &#xFF0C;F&#x53EF;&#x4EE5;&#x5FFD;&#x7565;&#xFF0C; NRI&#x6807;&#x8BB0;&#x8FD9;&#x4E2A;NALU&#x7684;&#x91CD;&#x8981;&#x6027; &#xFF0C;Type&#x6807;&#x8BB0;&#x5E27;&#x7C7B;&#x578B;&#xFF09;&#x3002;

4&#x3001;&#x6700;&#x540E;&#x83B7;&#x5F97;&#x6574;&#x4E2A;NAUL&#x540E; &#x5728;&#x524D;&#x9762;00 00 00 01 &#x4F20;&#x7ED9;&#x89E3;&#x7801;&#x5668;&#x89E3;&#x7801;&#x3002;
</code></pre>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/wkDrone_p7.png" alt="p"></p>
<pre><code class="lang-text">//&#x5173;&#x952E;&#x4EE3;&#x7801;&#xFF1A;
/**
   * &#x5C06; rtp&#x5305; &#x7EC4;&#x6210; NALU &#x683C;&#x5F0F;&#x7684;&#x6570;&#x636E; &lt;br&gt;
   *     &#x8FD4;&#x56DE;&#x4E00;&#x5E27;H264&#x6570;&#x636E;(&#x4E00;&#x4E2A;NALU)
   */
  public byte[] rtpPackage2NALU(byte[] rtpData)
  {
      if(rtpData.length == 0)
      {
          return null ;
      }
      RtpPackage rtpPackage = new RtpPackage();
      rtpPackage.V=(rtpData[0]&amp;0xFF)&gt;&gt;6 ;
      rtpPackage.PT = rtpData[1] &amp; 0x7F;
      rtpPackage.data = new byte[rtpData.length-12];
      System.arraycopy(rtpData, 12, rtpPackage.data, 0, rtpData.length - 12);
      if( (rtpPackage.V != 2)&amp;&amp;(rtpPackage.PT!=96) || rtpPackage.data.length &lt;2 )
      {
          return null;
      }
      // rtp&#x5C01;&#x5305;&#x65B9;&#x5F0F;&#xFF0C;&#x5355;&#x4E00;&#x5C01;&#x5305;&#x3001;&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x3001;&#x5206;&#x7247;&#x5C01;&#x5305;&#x7B49; 0x1F -&gt; 0001 1111
      int fuIndicatorTypeFlag = rtpPackage.data[0] &amp; 0x1F;
      // FU head&#x4E2D;&#x7684; S&#x3001;E&#x6807;&#x8BB0; &#x7528;&#x6765;&#x5224;&#x65AD;NALU&#x7684;&#x5F00;&#x59CB;&#x3001;&#x7ED3;&#x675F; 0xCO -&gt;  1100 0000  &#x53D6;S&#x3001;E
      int fuHeadSEFlag = rtpPackage.data[1] &amp; 0xC0;

      switch (fuIndicatorTypeFlag)
      {
          case NAL_UNIT_TYPE_STAP_A:
              break;
          case NAL_UNIT_TYPE_STAP_B:
              break;
          case NAL_UNIT_TYPE_MTAP16:
              break;
          case NAL_UNIT_TYPE_MTAP24:
              break;
          case NAL_UNIT_TYPE_FU_B:
              break;
          case NAL_UNIT_TYPE_FU_A:
              switch (fuHeadSEFlag)
              {
                  //NAL Unit start packet 0x80-&gt; 1000 0000
                  case 0x80:
                      NALEndFlag = false;
                      bufferLength = rtpPackage.data.length-1 ;
                      buffer[0] = new byte[rtpPackage.data.length-1];
                      /*
                      &#x6BCF;&#x4E00;&#x5E27;&#x5F00;&#x59CB;&#x7684;&#x65F6;&#x5019;&#x8981;&#x52A0;&#x4E0A;&#x8868;&#x793A;&#x8FD9;&#x4E2A;&#x5E27;&#x7C7B;&#x578B;&#x7684;&#x4FE1;&#x606F;&#x3002;
                      0xE0 -&gt;1110 0000    0x1F -&gt; 0001 1111
                      &#x53D6;FU indicator&#x7684;&#x524D;&#x4E09;&#x4F4D;&#x548C;FU Header&#x7684;&#x540E;&#x4E94;&#x4F4D;&#x3002;
                      &#x6700;&#x540E;&#x8FD9;&#x4E2A;byte&#x5305;&#x542B;&#x4E86;  F &#x3001;NRI &#x3001;Type &#x8FD9;&#x4E09;&#x4E2A;&#x4FE1;&#x606F;
                      F&#x53EF;&#x4EE5;&#x5FFD;&#x7565;&#xFF0C; NRI&#x6807;&#x8BB0;&#x8FD9;&#x4E2A;NALU&#x7684;&#x91CD;&#x8981;&#x6027; &#xFF0C;Type&#x6807;&#x8BB0;&#x5E27;&#x7C7B;&#x578B;
                      buffer[0][0] &#x5E27;&#x7C7B;&#x578B;&#x6570;&#x636E; 41&#x3001;61&#x3001;65&#x3001;67&#x3001;68&#x7B49;
                       */
                      buffer[0][0] = (byte)((rtpPackage.data[0] &amp; 0xE0)|(rtpPackage.data[1]&amp;0x1F));
                      System.arraycopy(rtpPackage.data,2,buffer[0],1,rtpPackage.data.length-2);
                      packetNum = 1;
                      break;
                  //NAL Unit middle packet   0x00-&gt;0000 0000
                  case 0x00:
                      NALEndFlag = false;
                      bufferLength += rtpPackage.data.length-2;
                      buffer[packetNum] = new byte[rtpPackage.data.length-2];
                      System.arraycopy(rtpPackage.data,2,buffer[packetNum],0,rtpPackage.data.length-2);
                      packetNum++;
                      break;
                  //NAL Unit end packet  0x40 --&gt;0100 0000
                  case 0x40:
                      NALEndFlag = true;
                      //+4 &#x662F;&#x56E0;&#x4E3A;&#x591A;&#x4E86; 00 00 00 01
                      NALUnit = new byte[bufferLength + rtpPackage.data.length- 2 + 4];
                      //&#x56E0;&#x4E3A;&#x6253;&#x5305;&#x53D1;&#x9001;&#x7684;&#x65F6;&#x5019;&#x662F;&#x53BB;&#x6389;&#x4E86;00 01&#x8FD9;&#x79CD;&#x6807;&#x8BB0;&#x4F4D;&#x7684;&#xFF0C;&#x4E3A;&#x4E86;&#x5904;&#x7406;&#x540E;&#x7EED;&#x7684;H264&#xFF0C;&#x9700;&#x8981;&#x624B;&#x52A8;&#x52A0;&#x4E0A;
                      NALUnit[0] = 0x00;
                      NALUnit[1] = 0x00;
                      NALUnit[2] = 0x00;
                      NALUnit[3] = 0x01;
                      int tmpLen = 4;
                      //&#x7B2C;&#x4E00;&#x7247; + &#x4E2D;&#x95F4;&#x7247; &#x6570;&#x636E;
                      for(int i = 0; i &lt; packetNum; ++i)
                      {
                          System.arraycopy(buffer[i],0,NALUnit,tmpLen,buffer[i].length);
                          tmpLen += buffer[i].length;
                      }
                      //&#x6700;&#x540E;&#x4E00;&#x7247;&#x7684;&#x6570;&#x636E;
                      System.arraycopy(rtpPackage.data,2,NALUnit,tmpLen,rtpPackage.data.length-2);
                      break;
              }
              break;

          //&#x8FD9;&#x91CC;&#x91C7;&#x7528;&#x6392;&#x9664;&#x6CD5;&#xFF0C;&#x6392;&#x9664;&#x4E86;&#x7EC4;&#x5305;&#x5C01;&#x88C5;&#x548C;&#x5206;&#x7247;&#x5C01;&#x88C5; &#x4E4B;&#x540E;&#x5C31;&#x8BA4;&#x4E3A;&#x662F; &#x5355;&#x4E2A;&#x6253;&#x5305;&#x6A21;&#x5F0F;
          default:
              NALUnit = new byte[4+rtpPackage.data.length];
              NALUnit[0] = 0x00;
              NALUnit[1] = 0x00;
              NALUnit[2] = 0x00;
              NALUnit[3] = 0x01;
              System.arraycopy(rtpPackage.data,0,NALUnit,4,rtpPackage.data.length);
              NALEndFlag = true;
              break;
      }
      if(NALEndFlag)
      {
         return  NALUnit;
      }else{
          return  null;
      }
  }
</code></pre>
<h2 id="&#x4E2A;&#x4EBA;&#x7ECF;&#x9A8C;"><a name="&#x4E2A;&#x4EBA;&#x7ECF;&#x9A8C;" class="anchor-navigation-ex-anchor" href="#&#x4E2A;&#x4EBA;&#x7ECF;&#x9A8C;"><i class="fa fa-link" aria-hidden="true"></i></a>4.6. &#x4E2A;&#x4EBA;&#x7ECF;&#x9A8C;</h2>
<ul>
<li>1&#x3001;&#x4EE5;java&#x4E3A;&#x4F8B;&#xFF0C;&#x52A0;&#x5165;&#x4F60;&#x4E0D;&#x77E5;&#x9053;&#x5F53;&#x524D;&#x6570;&#x636E;&#x8981;&#x4E0E;0X1F&#x8FDB;&#x884C;&#x4E0E;&#x8FD0;&#x7B97;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5148;&#x60F3;&#x60F3;&#x7528;&#x54EA;&#x4E2A;&#x4E8C;&#x8FDB;&#x5236;&#x53EF;&#x4EE5;&#x8FBE;&#x5230;&#x60F3;&#x8981;&#x7684;&#x76EE;&#x7684;&#xFF0C;&#x7136;&#x540E;&#x5C06;&#x8FD9;&#x4E2A;&#x4E8C;&#x8FDB;&#x5236;&#x8F6C;&#x4E3A;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x5C31;&#x53EF;&#x4EE5;&#x4E86;&#x3002;<pre><code class="lang-text">// rtp&#x5C01;&#x5305;&#x65B9;&#x5F0F;&#xFF0C;&#x5355;&#x4E00;&#x5C01;&#x5305;&#x3001;&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x3001;&#x5206;&#x7247;&#x5C01;&#x5305;&#x7B49; 0x1F -&gt; 0001 1111
int fuIndicatorTypeFlag = rtpPackage.data[0] &amp; 0x1F;
</code></pre>
</li>
</ul>
<h1 id="rtsp"><a name="rtsp" class="anchor-navigation-ex-anchor" href="#rtsp"><i class="fa fa-link" aria-hidden="true"></i></a>5. rtsp</h1>
<pre><code class="lang-html">RTSP&#x88AB;&#x7528;&#x4E8E;&#x5EFA;&#x7ACB;&#x7684;&#x63A7;&#x5236;&#x5A92;&#x4F53;&#x6D41;&#x7684;&#x4F20;&#x8F93; &#x3002;
Rtp&#x534F;&#x8BAE;&#x63D0;&#x4F9B;&#x4E86;&#x65F6;&#x95F4;&#x6233;&#x548C;&#x5E8F;&#x5217;&#x53F7;&#x3002;&#x53D1;&#x9001;&#x7AEF;&#x5728;&#x91C7;&#x6837;&#x65F6;&#x8BBE;&#x7F6E;&#x65F6;&#x95F4;&#x6233;&#xFF0C;&#x63A5;&#x6536;&#x7AEF;&#x6536;&#x5230;&#x540E;&#xFF0C;&#x4F1A;&#x6309;&#x7167;&#x65F6;&#x95F4;&#x6233;&#x4F9D;&#x6B21;&#x64AD;&#x653E;&#x3002;

RTP&#x672C;&#x8EAB;&#x53EA;&#x4FDD;&#x8BC1;&#x5B9E;&#x65F6;&#x6570;&#x636E;&#x7684;&#x4F20;&#x8F93;&#xFF0C;&#x5E76;&#x4E0D;&#x80FD;&#x4E3A;&#x6309;&#x987A;&#x5E8F;&#x4F20;&#x9001;&#x7684;&#x6570;&#x636E;&#x5305;&#x63D0;&#x4F9B;&#x53EF;&#x9760;&#x7684;&#x4F20;&#x9001;&#x673A;&#x5236;&#xFF0C;&#x4E5F;&#x4E0D;&#x63D0;&#x4F9B;&#x6D41;&#x91CF;&#x548C;&#x62E5;&#x585E;&#x63A7;&#x5236;&#xFF0C;
&#x5B83;&#x4F9D;&#x9760;RTCP&#x6765;&#x63D0;&#x4F9B;&#x8FD9;&#x4E9B;&#x670D;&#x52A1;&#x3002;

RTCP&#x901A;&#x5E38;&#x4E0E;RTP&#x914D;&#x5408;&#x4F7F;&#x7528;&#xFF0C;&#x7528;&#x4EE5;&#x7BA1;&#x7406;&#x4F20;&#x8F93;&#x8D28;&#x91CF;&#x5728;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x4EA4;&#x6362;&#x4FE1;&#x606F;&#x3002;
&#x5728;RTP&#x4F1A;&#x8BDD;&#x671F;&#x95F4;&#xFF0C;&#x5404;&#x53C2;&#x4E0E;&#x8005;&#x5468;&#x671F;&#x6027;&#x7684;&#x4F20;&#x9001;RTCP&#x5305;&#xFF0C;RTCP&#x5305;&#x4E2D;&#x5305;&#x542B;&#x5DF2;&#x53D1;&#x9001;&#x6570;&#x636E;&#x5305;&#x7684;&#x6570;&#x91CF;&#x3001;&#x4E22;&#x5931;&#x7684;&#x6570;&#x636E;&#x5305;&#x7684;&#x6570;&#x91CF;&#x7B49;&#x7EDF;&#x8BA1;&#x8D44;&#x6599;&#x3002;
&#x670D;&#x52A1;&#x5668;&#x53EF;&#x4EE5;&#x5229;&#x7528;&#x8FD9;&#x4E9B;&#x4FE1;&#x606F;&#x52A8;&#x6001;&#x7684;&#x6539;&#x53D8;&#x4F20;&#x8F93;&#x901F;&#x7387;&#xFF0C;&#x751A;&#x81F3;&#x6539;&#x53D8;&#x6709;&#x6548;&#x8F7D;&#x8377;&#x7684;&#x7C7B;&#x578B;&#x3002;
RTSP&#x901A;&#x5E38;&#x4F7F;&#x7528;RTP&#x534F;&#x8BAE;&#x6765;&#x4F20;&#x9001;&#x5B9E;&#x65F6;&#x6D41;&#xFF0C;RTP&#x4E00;&#x822C;&#x4F7F;&#x7528;&#x5076;&#x6570;&#x7AEF;&#x53E3;&#xFF0C;&#x800C;RTCP&#x4F7F;&#x7528;&#x76F8;&#x90BB;&#x7684;&#x5947;&#x6570;&#x7AEF;&#x53E3;&#xFF0C;&#x5373;RTP&#x7AEF;&#x53E3;&#x53F7;+1&#x3002;

&#x6CE8;&#x610F;: RTP &#x672C;&#x8EAB;&#x6CA1;&#x6709;&#x63D0;&#x4F9B;&#x4EFB;&#x4F55;&#x7684;&#x673A;&#x5236;&#x6765;&#x786E;&#x4FDD;&#x5B9E;&#x65F6;&#x7684;&#x4F20;&#x8F93;&#x6216;&#x5176;&#x4ED6;&#x7684;&#x670D;&#x52A1;&#x8D28;&#x91CF;&#x4FDD;&#x8BC1;&#xFF0C;&#x800C;&#x662F;&#x7531;&#x5E95;&#x5C42;&#x7684;&#x670D;&#x52A1;&#x6765;&#x5B8C;&#x6210;&#x3002;
&#x5B83;&#x4E0D;&#x4FDD;&#x8BC1;&#x4F20;&#x8F93;&#x6216;&#x9632;&#x6B62;&#x4E71;&#x5E8F;&#x4F20;&#x8F93;,&#x5B83;&#x4E0D;&#x5047;&#x5B9A;&#x4E0B;&#x5C42;&#x7F51;&#x7EDC;&#x662F;&#x5426;&#x53EF;&#x9760;,&#x662F;&#x5426;&#x6309;&#x987A;&#x5E8F;&#x4F20;&#x9001;&#x6570;&#x636E;&#x5305;&#x3002;
</code></pre>
<h1 id="rtsp-java-demo"><a name="rtsp-java-demo" class="anchor-navigation-ex-anchor" href="#rtsp-java-demo"><i class="fa fa-link" aria-hidden="true"></i></a>6. rtsp Java demo</h1>
<pre><code class="lang-text">&#x8BF7;&#x53C2;&#x8003; &#x8001;&#x7248;&#x672C;&#x7684;320&#x5DE5;&#x7A0B; &#x548C;&#x65B0;&#x7248;&#x672C;&#x7684; 320&#x5DE5;&#x7A0B;&#x3002;
&#x91CC;&#x9762;&#x6709;&#x4E24;&#x4E2A;&#x4E0D;&#x540C;&#x7248;&#x672C;&#x7684; rtsp &#x4F7F;&#x7528;&#x3002;
https://gitee.com/WkApp/WK_V420/tree/vitus320new/
</code></pre>
<h2 id="rtp&#x3001;rtsp&#x3001;rtcp&#x7684;&#x533A;&#x522B;"><a name="rtp&#x3001;rtsp&#x3001;rtcp&#x7684;&#x533A;&#x522B;" class="anchor-navigation-ex-anchor" href="#rtp&#x3001;rtsp&#x3001;rtcp&#x7684;&#x533A;&#x522B;"><i class="fa fa-link" aria-hidden="true"></i></a>6.1. RTP&#x3001;RTSP&#x3001;RTCP&#x7684;&#x533A;&#x522B;</h2>
<pre><code class="lang-text">Rtsp
&#x8FDB;&#x884C;&#x670D;&#x52A1;&#x7AEF;&#x548C;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x4FE1;&#x606F;&#x4EA4;&#x6D41;&#x3002;
&#x4F8B;&#x5982;&#x5BA2;&#x6237;&#x7AEF;&#x8BE2;&#x95EE;&#x670D;&#x52A1;&#x5668;&#x652F;&#x6301;&#x54EA;&#x4E9B;&#x65B9;&#x6CD5;&#x3001;&#x534F;&#x8BAE;&#x3001;sps&#x3001;pps&#x7B49;&#x3002;&#x6C9F;&#x901A;&#x4EE5;&#x4EC0;&#x4E48;&#x65B9;&#x5F0F;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#xFF0C;&#x662F;&#x5426;&#x8981;&#x5F00;&#x59CB;&#x53D1;&#x9001;&#x6570;&#x636E;&#x4E86;&#x7B49;&#x3002;

Rtp
&#x670D;&#x52A1;&#x5668;&#x4EE5;&#x7EA6;&#x5B9A;&#x597D;&#x7684;&#x683C;&#x5F0F;&#x5F80;&#x5BA2;&#x6237;&#x7AEF;&#x8FDB;&#x884C;&#x53D1;&#x9001;&#x5C01;&#x88C5;&#x597D;&#x7684;&#x6570;&#x636E;&#x3002;

RTCP
&#x5F53;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x73B0;RTP&#x4E22;&#x5305;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x7EA6;&#x5B9A;&#x597D;&#x7684;&#x683C;&#x5F0F;&#x5F80;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x8981;&#x6C42;&#x670D;&#x52A1;&#x5668;&#x91CD;&#x53D1;&#x6570;&#x636E;&#x3002;
&#x6CE8;&#xFF1A;&#x867D;&#x7136;UDP&#x662F;&#x5355;&#x5411;&#x901A;&#x4FE1;&#x7684;&#xFF0C; &#x4F46;&#x662F; RTP + RTCP &#x5176;&#x5B9E;&#x76F8;&#x5F53;&#x4E8E;&#x5EFA;&#x7ACB;&#x8D77;&#x4E86;&#x4E00;&#x4E2A;&#x53CC;&#x5411;&#x5BF9;&#x8BDD;&#x7684;&#x673A;&#x5236;&#x4E86;&#x3002;
</code></pre>
<h2 id="rtsp-&#x7684;&#x4EA4;&#x4E92;&#x8FC7;&#x7A0B;-&#xFF08;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF09;"><a name="rtsp-&#x7684;&#x4EA4;&#x4E92;&#x8FC7;&#x7A0B;-&#xFF08;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF09;" class="anchor-navigation-ex-anchor" href="#rtsp-&#x7684;&#x4EA4;&#x4E92;&#x8FC7;&#x7A0B;-&#xFF08;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>6.2. rtsp &#x7684;&#x4EA4;&#x4E92;&#x8FC7;&#x7A0B; &#xFF08;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF09;</h2>
<pre><code class="lang-text">1&#x3001;OPTIONS&#xFF08;&#x53EF;&#x9009;&#xFF09;
RTSP&#x5BA2;&#x6237;&#x7AEF;   &#x2014;&gt; RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF;  OPTIONS&#x547D;&#x4EE4;      //&#x8BE2;&#x95EE;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x6709;&#x54EA;&#x4E9B;&#x65B9;&#x6CD5;&#x53EF;&#x4F7F;&#x7528;
RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF; &#x2014;&gt; RTSP&#x5BA2;&#x6237;&#x7AEF;  &#x56DE;&#x590D;OPTIONS&#x547D;&#x4EE4;    //&#x56DE;&#x590D;&#x5BA2;&#x6237;&#x7AEF;&#x670D;&#x52A1;&#x5668;&#x652F;&#x6301;&#x7684;&#x65B9;&#x6CD5;  

2&#x3001;DESCRIBE &#xFF08;&#x53EF;&#x9009;&#xFF09;
RTSP&#x5BA2;&#x6237;&#x7AEF;   &#x2014;&gt;  RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF;   DESCRIBE&#x547D;&#x4EE4;      //&#x8BF7;&#x6C42;&#x5BF9;&#x5A92;&#x4F53;&#x8D44;&#x6E90;&#x7684;&#x63CF;&#x8FF0;&#x4FE1;&#x606F;
RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF; &#x2014;&gt;  RTSP&#x5BA2;&#x6237;&#x7AEF; &#x3000;&#x3000;&#x56DE;&#x590D;DESCRIBE&#x547D;&#x4EE4;&#x3000;//&#x56DE;&#x590D;&#x5BA2;&#x6237;&#x7AEF;&#x67D0;&#x4E2A;&#x5A92;&#x4F53;&#x8D44;&#x6E90;&#x7684;&#x63CF;&#x8FF0;&#x4FE1;&#x606F;&#xFF08;&#x5373;SDP&#xFF09;

3&#x3001;SETUP&#xFF08;&#x5FC5;&#x9009;&#xFF09;
RTSP&#x5BA2;&#x6237;&#x7AEF;   &#x2014;&gt; RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x3000;SETUP&#x547D;&#x4EE4;       //&#x8BF7;&#x6C42;&#x5EFA;&#x7ACB;&#x5BF9;&#x67D0;&#x4E2A;&#x5A92;&#x4F53;&#x8D44;&#x6E90;&#x7684;&#x8FDE;&#x63A5;
RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF; &#x2014;&gt;  RTSP&#x5BA2;&#x6237;&#x7AEF;&#x3000; &#x56DE;&#x590D;SETUP&#x547D;&#x4EE4;&#x3000; //&#x56DE;&#x590D;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x7684;&#x7ED3;&#x679C;
&#x3000;&#x3000;
4&#x3001;PLAY&#xFF08;&#x5FC5;&#x9009;&#xFF09;
RTSP&#x5BA2;&#x6237;&#x7AEF;    &#x2014;&gt;  RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x3000; PLAY&#x547D;&#x4EE4;&#x3000;&#x3000;&#x3000;   //&#x8BF7;&#x6C42;&#x64AD;&#x653E;&#x5A92;&#x4F53;&#x8D44;&#x6E90;
RTSP&#x670D;&#x52A1;&#x5668;&#x7AEF;  &#x2014;&gt;  RTSP&#x5BA2;&#x6237;&#x7AEF;&#x3000;&#x3000; &#x56DE;&#x590D;PLAY&#x547D;&#x4EE4;&#x3000;&#x3000; //&#x56DE;&#x590D;&#x64AD;&#x653E;&#x7684;&#x7ED3;&#x679C;

5&#x3001;&#x5176;&#x4ED6;&#x7684;&#x4EA4;&#x4E92;&#x65B9;&#x6CD5;&#xFF0C;&#x8BF7;&#x81EA;&#x884C;&#x67E5;&#x9605; &#x3002;
&#x4F8B;&#x5982; TEARDOWN&#x3001;PAUSE&#x3001;SCALE&#x3001; GET_PARAMETER&#x3001;SET_PARAMETER
</code></pre>
<h2 id="&#x642D;&#x5EFA;&#x3001;&#x6D4B;&#x8BD5;rtsp&#x4EA4;&#x4E92;"><a name="&#x642D;&#x5EFA;&#x3001;&#x6D4B;&#x8BD5;rtsp&#x4EA4;&#x4E92;" class="anchor-navigation-ex-anchor" href="#&#x642D;&#x5EFA;&#x3001;&#x6D4B;&#x8BD5;rtsp&#x4EA4;&#x4E92;"><i class="fa fa-link" aria-hidden="true"></i></a>6.3. &#x642D;&#x5EFA;&#x3001;&#x6D4B;&#x8BD5;rtsp&#x4EA4;&#x4E92;</h2>
<p>&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x4EE5;&#x4E0B;&#x65B9;&#x6848;&#x642D;&#x5EFA;&#x4E00;&#x5957;&#x7CFB;&#x7EDF;&#x3002;</p>
<h3 id="&#x91C7;&#x96C6;&#x3001;&#x63A8;&#x6D41;"><a name="&#x91C7;&#x96C6;&#x3001;&#x63A8;&#x6D41;" class="anchor-navigation-ex-anchor" href="#&#x91C7;&#x96C6;&#x3001;&#x63A8;&#x6D41;"><i class="fa fa-link" aria-hidden="true"></i></a>6.3.1. &#x91C7;&#x96C6;&#x3001;&#x63A8;&#x6D41;</h3>
<p>&#x7528;<a href="https://github.com/EasyDSS/EasyPusher-Android" target="_blank">EasyPusher</a> , &#x5546;&#x4E1A;&#x9700;&#x8981;&#x6388;&#x6743;&#x3002;</p>
<h3 id="&#x6D41;&#x5A92;&#x4F53;&#x670D;&#x52A1;&#x5668;"><a name="&#x6D41;&#x5A92;&#x4F53;&#x670D;&#x52A1;&#x5668;" class="anchor-navigation-ex-anchor" href="#&#x6D41;&#x5A92;&#x4F53;&#x670D;&#x52A1;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a>6.3.2. &#x6D41;&#x5A92;&#x4F53;&#x670D;&#x52A1;&#x5668;</h3>
<p>&#x7528;<a href="https://github.com/EasyDarwin/EasyDarwin/tree/master/EasyDarwin" target="_blank">EasyDarwin </a> &#xFF0C; &#x5B8C;&#x5168;&#x514D;&#x8D39;&#x3002;</p>
<h3 id="&#x89E3;&#x7801;&#x64AD;&#x653E;"><a name="&#x89E3;&#x7801;&#x64AD;&#x653E;" class="anchor-navigation-ex-anchor" href="#&#x89E3;&#x7801;&#x64AD;&#x653E;"><i class="fa fa-link" aria-hidden="true"></i></a>6.3.3. &#x89E3;&#x7801;&#x64AD;&#x653E;</h3>
<p>&#x7528; VLC &#xFF0C;&#x5B8C;&#x5168;&#x514D;&#x8D39;&#x3002;</p>
<h2 id="&#x89E3;rtsp&#x534F;&#x8BAE;&#x83B7;&#x5F97;h264-&#xFF0C;java&#x5B9E;&#x73B0;demo"><a name="&#x89E3;rtsp&#x534F;&#x8BAE;&#x83B7;&#x5F97;h264-&#xFF0C;java&#x5B9E;&#x73B0;demo" class="anchor-navigation-ex-anchor" href="#&#x89E3;rtsp&#x534F;&#x8BAE;&#x83B7;&#x5F97;h264-&#xFF0C;java&#x5B9E;&#x73B0;demo"><i class="fa fa-link" aria-hidden="true"></i></a>6.4. &#x89E3;rtsp&#x534F;&#x8BAE;&#x83B7;&#x5F97;H264 &#xFF0C;java&#x5B9E;&#x73B0;demo</h2>
<pre><code class="lang-text">public class RtspClient{
    private final String TAG=&quot;RtspClient&quot; ;
    /**&#x662F;&#x5426;&#x662F;tcp&#x65B9;&#x5F0F;*/
    private boolean isTCPtranslate;
    private String hostIp;
    private int port;
    private String rtspUrl ;
    /**rtsp&#x7248;&#x672C;&#x53F7;&#xFF0C;&#x5FC5;&#x987B;&#x662F;1.0? &#x8FD8;&#x4E0D;&#x786E;&#x5B9A;&#xFF01;*/
    private static final String VERSION = &quot; RTSP1.0\r\n&quot;;
    /**rtsp&#x670D;&#x52A1;&#x5668;&#x6B63;&#x786E;&#x53CD;&#x5E94;&#x6807;&#x8BB0;*/
    private static final String RTSP_OK = &quot;RTSP/1.0 200 OK&quot;;
    /**&#x8BF7;&#x6C42;&#x56DE;&#x5E94;&#x5BF9;&#x7684;&#x5E8F;&#x5217;*/
    private int seq=1;
    /**&#x4F1A;&#x8BDD; Session&#x5728;setup&#x8BF7;&#x6C42;&#x540E;&#x8FD4;&#x56DE;  */
    private String sessionid=null;
    /**trackID &#x5728; &#x8BF7;&#x6C42;Descrbe &#x4E4B;&#x540E;&#x8FD4;&#x56DE;*/
    private String trackInfo;
    /**&#x8F6C;&#x6362;&#x8D26;&#x53F7;&#x548C;&#x5BC6;&#x7801;*/
    private String authorBase64;
    /**&#x5BA2;&#x6237;&#x7AEF;&#x4EE3;&#x7406;&#x540D;&#x79F0;&#x968F;&#x610F;&#x586B;*/
    private final static String UserAgent = &quot;RtspWalkera/1.0&quot;;
    private Socket mSocket;
    private BufferedReader mBufferreader;
    private OutputStream mOutputStream;
    /**
     * &#x6784;&#x9020;&#x51FD;&#x6570; &#xFF0C; &#x8FDB;&#x884C;&#x53C2;&#x6570;&#x521D;&#x59CB;&#x5316;
     * @param isTCPtranslate tcp&#x65B9;&#x5F0F;&#x8FD8;&#x662F; udp&#x65B9;&#x5F0F;
     * @param hostIp  &#x670D;&#x52A1;&#x5668;ip
     * @param port  &#x670D;&#x52A1;&#x5668;&#x7AEF;&#x53E3;
     * @param rtspUrl  rtsp&#x64AD;&#x653E;&#x5730;&#x5740;
     * @param authorName &#x767B;&#x5F55;&#x8D26;&#x53F7;
     * @param authorPassword &#x767B;&#x5F55;&#x5BC6;&#x7801;
     */
    public RtspClient(boolean isTCPtranslate, String hostIp,int port,
    String rtspUrl ,String authorName,String authorPassword)  {
        this.isTCPtranslate = isTCPtranslate;
        this.rtspUrl = rtspUrl;
        this.hostIp = hostIp ;
        this.port = port;
        if(authorName == null &amp;&amp; authorPassword == null) {
            authorBase64 = null;
        }  else {
            // &#x8FD4;&#x56DE;Base64&#x7F16;&#x7801;&#x8FC7;&#x7684;&#x5B57;&#x8282;&#x6570;&#x7EC4;&#x5B57;&#x7B26;&#x4E32;
            authorBase64 = Base64.encodeToString((authorName+&quot;:&quot;+authorPassword).getBytes(),Base64.DEFAULT);
        }
    }

    private String addHeaders(){
        return &quot;CSeq: &quot; + (seq++) + &quot;\r\n&quot;
                + ((authorBase64 == null)?&quot;&quot;:(&quot;Authorization: Basic &quot; +authorBase64 +&quot;\r\n&quot;))
                + &quot;User-Agent: &quot; + UserAgent + &quot;\r\n&quot;
                + ((sessionid == null)?&quot;&quot;:(&quot;Session: &quot; + sessionid + &quot;\r\n&quot;))
                + &quot;\r\n&quot;;
    }

    /**
     * option&#x8BF7;&#x6C42; &lt;br&gt;
     *     &#x6B64;&#x6B65;&#x9AA4;&#x975E;&#x5FC5;&#x987B;
     */
    public void doOption(){
        StringBuilder sb = new StringBuilder();
        sb.append(&quot;OPTIONS &quot;);
        sb.append(this.rtspUrl.substring(0, rtspUrl.lastIndexOf(&quot;/&quot;)));
        sb.append(VERSION);
        sb.append(addHeaders());
        try{
            outQueue.put(sb.toString());
        }catch (Exception e)  {}
    }

    /**
     *  Describe &#x8BF7;&#x6C42;&lt;br&gt;
     *  sps &#x548C; pps &#x4F1A;&#x5728;&#x8FD9;&#x4E2A;&#x9636;&#x6BB5;&#x8FD4;&#x56DE;
     *  sprop-parameter-sets= Z0IAKpY1QMgEvTcBAQEC,aM48gA==
     *  &#x5C06;  sprop-parameter-sets &#x5BF9;&#x5E94;&#x7684;&#x503C;&#x7528;base64 &#x89E3;&#x7801;&#x5373;&#x53EF; 67 &#x548C;68
     *  &#x5206;&#x522B;&#x5BF9;&#x5E94;sps &#x548C;pps . &lt;br&gt;
     *      &#x4E0D;&#x8FC7;&#x6709;&#x7684;rtsp&#x670D;&#x52A1;&#x5668;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x6309;&#x6807;&#x51C6;&#x5199;&#x7684;&#x8BDD; &#xFF0C;sprop-parameter-sets &#x8FD4;&#x56DE;&#x7684;&#x503C;&#x53EF;&#x80FD;&#x4E3A;&#x7A7A;&#x3002;
     *      &#x6B64;&#x65F6; &#x5982;&#x679C;&#x60F3;&#x83B7;&#x53D6;sps &#x548C;pps &#x53EA;&#x80FD;&#x901A;&#x8FC7;rtsp&#x670D;&#x52A1;&#x5668;&#x8FD4;&#x56DE;&#x7684; &#x5E27;&#x6570;&#x636E;&#x4E2D;&#x53BB;&#x83B7;&#x53D6;&#x4E86;&#x3002;
     */
    public void doDescribe()  {
        StringBuilder sb = new StringBuilder();
        sb.append(&quot;DESCRIBE &quot;);
        sb.append(this.rtspUrl);
        sb.append(VERSION);
        sb.append(addHeaders());
        try  {
            outQueue.put(sb.toString());
        }catch (Exception e)  {}
    }

    /**
     * &#x8BF7;&#x6C42;setup &#x3002; &lt;br&gt;
     * RTP/AVP/TCP : RTP&#x91C7;&#x7528;TCP&#x65B9;&#x5F0F; &lt;br&gt;
     * unicast&#x8868;&#x793A;&#x5355;&#x64AD;&lt;br&gt;
     * client_port=55640-55641 &#xFF1A;&#x524D;&#x4E00;&#x4E2A;&#x662F;RTP&#x7AEF;&#x53E3; &#xFF0C;&#x540E;&#x4E00;&#x4E2A;&#x662F;RTCP&#x7AEF;&#x53E3;&lt;br&gt;
     *
     */
    public void doSetup( )  {
        StringBuilder sb = new StringBuilder();
        if ( isTCPtranslate ) {
            sb.append(&quot;SETUP &quot;);
            sb.append(this.rtspUrl);
            sb.append(&quot;/&quot;);
            sb.append(trackInfo);
            sb.append(VERSION);
            sb.append(&quot;Transport: RTP/AVP/TCP;unicast;client_port=55640-55641&quot; + &quot;\r\n&quot;);
            sb.append(addHeaders());
        } else {
            sb.append(&quot;SETUP &quot;);
            sb.append(this.rtspUrl);
            sb.append(&quot;/&quot;);
            sb.append(trackInfo);
            sb.append(VERSION);
            sb.append(&quot;Transport: RTP/AVP/UDP;unicast;client_port=55640-55641&quot; + &quot;\r\n&quot;);
            sb.append(addHeaders());
        }
        try  {
            outQueue.put(sb.toString());
        }catch (Exception e)  {  }
    }

    /**
     * play &#x8BF7;&#x6C42;
     */
    public void doPlay(){
        StringBuilder sb = new StringBuilder();
        sb.append(&quot;PLAY &quot;);
        sb.append(this.rtspUrl);
        sb.append(VERSION);
        //&#x8BBE;&#x7F6E;&#x64AD;&#x653E;&#x7684;&#x65F6;&#x95F4;&#x8303;&#x56F4;
        sb.append(&quot;Range: npt=0.000-\r\n&quot;);
        sb.append(addHeaders()) ;
        try  {
            outQueue.put(sb.toString());
        }catch (Exception e)  {  }
    }

    /**
     * Pause &#x6682;&#x505C;&#x8BF7;&#x6C42;
     */
    public void doPause() {
        StringBuilder sb = new StringBuilder();
        sb.append(&quot;PAUSE &quot;);
        sb.append(this.rtspUrl);
        sb.append(&quot;/&quot;);
        sb.append(VERSION);
        sb.append(addHeaders()) ;
        try{
            outQueue.put(sb.toString());
        }catch (Exception e)  {  }
    }

    /**
     * &#x5173;&#x95ED;&#x8FDE;&#x63A5;
     */
    public void doTeardown(){
        StringBuilder sb = new StringBuilder();
        sb.append(&quot;TEARDOWN &quot;);
        sb.append(this.rtspUrl);
        sb.append(&quot;/&quot;);
        sb.append(VERSION);
        sb.append(addHeaders()) ;
        try  {
            outQueue.put(sb.toString());
        }catch (Exception e){ }
    }

    /**
     * &#x5F80;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x9001;&#x6570;&#x636E;
     */
    private void sendBytes(String questStr)  {
        try  {
            byte[] buffer= questStr.getBytes(&quot;UTF-8&quot;);
            mOutputStream.write(buffer);
            mOutputStream.flush();
            Log.i(TAG ,&quot;&#x8BF7;&#x6C42;&#x670D;&#x52A1;&#x5668;&#xFF1A;&quot;+questStr +&quot; &quot;+outQueue.size());
        }catch (Exception e)
        {
            Log.i(TAG ,&quot;&#x8BF7;&#x6C42;&#x670D;&#x52A1;&#x5668;&#x5F02;&#x5E38;&#xFF1A;&quot;+e.getMessage());
        }
    }

    private boolean isStopReceive =false ;
    /***
     * rtsp &#x63A5;&#x6536;&#x5B50;&#x7EBF;&#x7A0B;
     */
    private class ReceiveThread extends Thread{
        @Override
        public void run()  {
            while(!isStopReceive)  {
                try  {
                    if(mBufferreader!=null)
                    {
                        String line  ;
                        if( (line = mBufferreader.readLine()) != null)
                        {
                            Log.i(TAG ,&quot;&#x6536;&#x5230;&#x670D;&#x52A1;&#x5668;&#x8FD4;&#x56DE;=&quot; + line);
                        }else {
                            Log.i(TAG ,&quot;&#x6536;&#x5230;&#x670D;&#x52A1;&#x5668;&#x8FD4;&#x56DE; line==null&quot; );
                        }
                    }
                    //&#x4F11;&#x7720;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;
                    Thread.sleep(60);
                }catch (Exception e)
                {
                    Log.i(TAG ,&quot;&#x63A5;&#x6536;&#x670D;&#x52A1;&#x5668;&#x5F02;&#x5E38;&quot; +e.getLocalizedMessage());
                }
            }
        }
    }

    private LinkedBlockingDeque&lt;byte[]&gt; rtpDataBuffer = new LinkedBlockingDeque&lt;&gt;();
    private DatagramSocket mUdpSocket;
    private DatagramPacket mUdpPackets;
    int udpPort = 55640; //55640- 55641
    private byte[] message = new byte[2048];
    /***
     * upd rtp &#x63A5;&#x6536;&#x5B50;&#x7EBF;&#x7A0B;
     */
    private class ReceiveRTPUdpThread extends Thread  {
        @Override
        public void run(){
            while(!isStopReceive)  {
                try  {
                    if(mUdpSocket==null)
                    {
                        mUdpSocket = new DatagramSocket(udpPort);
                        mUdpPackets = new DatagramPacket(message,message.length);
                    }else{
                        mUdpSocket.receive(mUdpPackets);
                        byte[] buffer = new byte[mUdpPackets.getLength()];
                        System.arraycopy(mUdpPackets.getData(), 0, buffer, 0, mUdpPackets.getLength());
                        try {
                            rtpDataBuffer.put(buffer);
                        } catch (InterruptedException e) {
                            Log.e(TAG,&quot;The buffer queue is full , wait for the place..&quot;);
                        }
                    }

                    //&#x4F11;&#x7720;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;
                    Thread.sleep(0);
                }catch (Exception e)
                {
                    Log.i(TAG ,&quot;udp&#x63A5;&#x6536;&#x670D;&#x52A1;&#x5668;&#x5F02;&#x5E38;&quot; +e.getLocalizedMessage());
                }
            }
        }
    }

    public byte[]getRtpData(){
        byte[] nalu =null;
        if(rtpDataBuffer !=null &amp;&amp; rtpDataBuffer.size()&gt;0){
            try {
                nalu = rtpDataBuffer.take();
            }catch (Exception e)  {  }

        }
        return  nalu ;
    }

    /**&#x53D1;&#x9001;&#x961F;&#x5217;*/
    private BlockingQueue&lt;String&gt; outQueue = new LinkedBlockingQueue&lt; &gt;(Integer.MAX_VALUE);;
    /**
     * &#x53D1;&#x9001;&#x5B50;&#x7EBF;&#x7A0B;
     */
    private class SendThread extends  Thread  {
        @Override
        public void run()  {
            while(!isStopReceive)  {
                try  {
                    String buffer  = outQueue.poll();
                    if (buffer != null){
                        sendBytes(buffer);
                    }
                    //&#x4F11;&#x7720;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;
                    Thread.sleep(60);
                }catch (Exception e)  {}
            }
        }
    }

    /**
     * &#x5F00;&#x542F;rtsp&#x5BA2;&#x6237;&#x7AEF;
     */
    public void openRtspCline()  {
        isStopReceive = false ;
        Thread  thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    mSocket = new Socket(hostIp, port);
                    mBufferreader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
                    mOutputStream = mSocket.getOutputStream();
                }catch (IOException e)
                {
                    Log.i(TAG,&quot;&#x521B;&#x5EFA;socket&#x51FA;&#x73B0;&#x5F02;&#x5E38;=&quot;+e.getLocalizedMessage()) ;
                }
            }
        });
        thread.start();

        ReceiveThread receiveThread = new ReceiveThread();
        receiveThread.start();
        SendThread sendThread = new SendThread() ;
        sendThread.start();

        ReceiveRTPUdpThread receiveRTPUdpThread = new ReceiveRTPUdpThread();
        receiveRTPUdpThread.start();
    }

    /**
     * &#x5173;&#x95ED;rtsp&#x5BA2;&#x6237;&#x7AEF;
     */
    public void shutDownRtspClient()  {
        isStopReceive = true ;
    }
}
</code></pre>
<pre><code class="lang-text">/**
 *  RTP &#x6570;&#x636E;&#x5305; &#x7ED3;&#x6784;
 */
public class RtpPackage{
    /**&#x7248;&#x672C;&#x662F; 2*/
    public int V ;
    /**&#x586B;&#x5145;&#x6807;&#x5FD7;*/
    public int P ;
    /**&#x62D3;&#x5C55;&#x6807;&#x5FD7;*/
    public int X ;
    /**csrc&#x8BA1;&#x6570;&#x5668;*/
    public int CC ;
    /**&#x97F3;&#x9891;&#x3001;&#x89C6;&#x9891;&#x6807;&#x8BB0;*/
    public int M ;
    /**&#x591A;&#x5A92;&#x4F53;&#x7684;&#x7C7B;&#x578B; H.264&#x7684;&#x7C7B;&#x578B;&#x4E3A;96*/
    public int PT;
    /**&#x5E8F;&#x5217;&#x53F7;*/
    public int sequenceNumber;
    /**&#x65F6;&#x95F4;&#x6233;*/
    public long timestamp;
    /**ssrc*/
    public long ssrcIdentifier;
    /**csrc&#x5217;&#x8868;*/
    public int csrcIdentiferList ;
    /**rtp &#x5305;&#x6570;&#x636E;*/
    public byte[] data;
}
</code></pre>
<pre><code class="lang-text">public   class RTP2NaluTools{
    private final String TAG=&quot;RTP2NaluTools&quot; ;
    private final static int NAL_UNIT_TYPE_STAP_A = 24;
    private final static int NAL_UNIT_TYPE_STAP_B = 25;
    private final static int NAL_UNIT_TYPE_MTAP16 = 26;
    private final static int NAL_UNIT_TYPE_MTAP24 = 27;
    private final static int NAL_UNIT_TYPE_FU_A = 28;
    private final static int NAL_UNIT_TYPE_FU_B = 29;
    /**&#x4E00;&#x5E27;&#x6570;&#x636E;&#xFF08;&#x4E00;&#x4E2A;NALU&#xFF09;*/
    private byte[] NALUnit;
    /**NALU&#x7ED3;&#x675F;&#x6807;&#x8BB0;*/
    private boolean NALEndFlag;
    /**&#x4E34;&#x65F6;&#x53D8;&#x91CF; buffer[i] &#x5B58;&#x50A8;&#x6BCF;&#x4E00;&#x7247;&#x6570;&#x636E; */
    private byte[][] buffer = new byte[1024][];
    /**&#x5F53;&#x524D;&#x5DF2;&#x7ECF;&#x63A5;&#x6536;&#x7684;NALU&#x7684;&#x6570;&#x636E;&#x957F;&#x5EA6;*/
    private int bufferLength;
    /**&#x5F53;&#x524D;&#x5DF2;&#x7ECF;&#x63A5;&#x6536;&#x7684;&#x6570;&#x636E;&#x7247;&#x6570;&#x91CF;*/
    private int packetNum;
    public RTP2NaluTools()  {
        NALEndFlag = false;
        bufferLength= 0;
        packetNum =0;
    }

    /**
     * &#x5C06; rtp&#x5305; &#x7EC4;&#x6210; NALU &#x683C;&#x5F0F;&#x7684;&#x6570;&#x636E; &lt;br&gt;
     *     &#x8FD4;&#x56DE;&#x4E00;&#x5E27;H264&#x6570;&#x636E;(&#x4E00;&#x4E2A;NALU)
     */
    public byte[] rtpPackage2NALU(byte[] rtpData)  {
        if(rtpData.length == 0)  {
            return null ;
        }
        RtpPackage rtpPackage = new RtpPackage();
        rtpPackage.V=(rtpData[0]&amp;0xFF)&gt;&gt;6 ;
        rtpPackage.PT = rtpData[1] &amp; 0x7F;
        rtpPackage.data = new byte[rtpData.length-12];
        System.arraycopy(rtpData, 12, rtpPackage.data, 0, rtpData.length - 12);
        if( (rtpPackage.V != 2)&amp;&amp;(rtpPackage.PT!=96) || rtpPackage.data.length &lt;2 )  {
            return null;
        }
        // rtp&#x5C01;&#x5305;&#x65B9;&#x5F0F;&#xFF0C;&#x5355;&#x4E00;&#x5C01;&#x5305;&#x3001;&#x7EC4;&#x5408;&#x5C01;&#x5305;&#x3001;&#x5206;&#x7247;&#x5C01;&#x5305;&#x7B49; 0x1F -&gt; 0001 1111
        int fuIndicatorTypeFlag = rtpPackage.data[0] &amp; 0x1F;
        // FU head&#x4E2D;&#x7684; S&#x3001;E&#x6807;&#x8BB0; &#x7528;&#x6765;&#x5224;&#x65AD;NALU&#x7684;&#x5F00;&#x59CB;&#x3001;&#x7ED3;&#x675F; 0xCO -&gt;  1100 0000  &#x53D6;S&#x3001;E
        int fuHeadSEFlag = rtpPackage.data[1] &amp; 0xC0;

        switch (fuIndicatorTypeFlag)  {
            case NAL_UNIT_TYPE_STAP_A:
                break;
            case NAL_UNIT_TYPE_STAP_B:
                break;
            case NAL_UNIT_TYPE_MTAP16:
                break;
            case NAL_UNIT_TYPE_MTAP24:
                break;
            case NAL_UNIT_TYPE_FU_B:
                break;
            case NAL_UNIT_TYPE_FU_A:
                switch (fuHeadSEFlag)  {
                    //NAL Unit start packet 0x80-&gt; 1000 0000
                    case 0x80:
                        NALEndFlag = false;
                        bufferLength = rtpPackage.data.length-1 ;
                        buffer[0] = new byte[rtpPackage.data.length-1];
                        /*
                        &#x6BCF;&#x4E00;&#x5E27;&#x5F00;&#x59CB;&#x7684;&#x65F6;&#x5019;&#x8981;&#x52A0;&#x4E0A;&#x8868;&#x793A;&#x8FD9;&#x4E2A;&#x5E27;&#x7C7B;&#x578B;&#x7684;&#x4FE1;&#x606F;&#x3002;
                        0xE0 -&gt;1110 0000    0x1F -&gt; 0001 1111
                        &#x53D6;FU indicator&#x7684;&#x524D;&#x4E09;&#x4F4D;&#x548C;FU Header&#x7684;&#x540E;&#x4E94;&#x4F4D;&#x3002;
                        &#x6700;&#x540E;&#x8FD9;&#x4E2A;byte&#x5305;&#x542B;&#x4E86;  F &#x3001;NRI &#x3001;Type &#x8FD9;&#x4E09;&#x4E2A;&#x4FE1;&#x606F;
                        F&#x53EF;&#x4EE5;&#x5FFD;&#x7565;&#xFF0C; NRI&#x6807;&#x8BB0;&#x8FD9;&#x4E2A;NALU&#x7684;&#x91CD;&#x8981;&#x6027; &#xFF0C;Type&#x6807;&#x8BB0;&#x5E27;&#x7C7B;&#x578B;
                        buffer[0][0] &#x5E27;&#x7C7B;&#x578B;&#x6570;&#x636E; 41&#x3001;61&#x3001;65&#x3001;67&#x3001;68&#x7B49;
                         */
                        buffer[0][0] = (byte)((rtpPackage.data[0] &amp; 0xE0)|(rtpPackage.data[1]&amp;0x1F));
                        System.arraycopy(rtpPackage.data,2,buffer[0],1,rtpPackage.data.length-2);
                        packetNum = 1;
                        break;
                    //NAL Unit middle packet   0x00-&gt;0000 0000
                    case 0x00:
                        NALEndFlag = false;
                        bufferLength += rtpPackage.data.length-2;
                        buffer[packetNum] = new byte[rtpPackage.data.length-2];
                        System.arraycopy(rtpPackage.data,2,buffer[packetNum],0,rtpPackage.data.length-2);
                        packetNum++;
                        break;
                    //NAL Unit end packet  0x40 --&gt;0100 0000
                    case 0x40:
                        NALEndFlag = true;
                        //+4 &#x662F;&#x56E0;&#x4E3A;&#x591A;&#x4E86; 00 00 00 01
                        NALUnit = new byte[bufferLength + rtpPackage.data.length- 2 + 4];
                        //&#x56E0;&#x4E3A;&#x6253;&#x5305;&#x53D1;&#x9001;&#x7684;&#x65F6;&#x5019;&#x662F;&#x53BB;&#x6389;&#x4E86;00 01&#x8FD9;&#x79CD;&#x6807;&#x8BB0;&#x4F4D;&#x7684;&#xFF0C;&#x4E3A;&#x4E86;&#x5904;&#x7406;&#x540E;&#x7EED;&#x7684;H264&#xFF0C;&#x9700;&#x8981;&#x624B;&#x52A8;&#x52A0;&#x4E0A;
                        NALUnit[0] = 0x00;
                        NALUnit[1] = 0x00;
                        NALUnit[2] = 0x00;
                        NALUnit[3] = 0x01;
                        int tmpLen = 4;
                        //&#x7B2C;&#x4E00;&#x7247; + &#x4E2D;&#x95F4;&#x7247; &#x6570;&#x636E;
                        for(int i = 0; i &lt; packetNum; ++i)
                        {
                            System.arraycopy(buffer[i],0,NALUnit,tmpLen,buffer[i].length);
                            tmpLen += buffer[i].length;
                        }
                        //&#x6700;&#x540E;&#x4E00;&#x7247;&#x7684;&#x6570;&#x636E;
                        System.arraycopy(rtpPackage.data,2,NALUnit,tmpLen,rtpPackage.data.length-2);
                        break;
                }
                break;

            //&#x8FD9;&#x91CC;&#x91C7;&#x7528;&#x6392;&#x9664;&#x6CD5;&#xFF0C;&#x6392;&#x9664;&#x4E86;&#x7EC4;&#x5305;&#x5C01;&#x88C5;&#x548C;&#x5206;&#x7247;&#x5C01;&#x88C5; &#x4E4B;&#x540E;&#x5C31;&#x8BA4;&#x4E3A;&#x662F; &#x5355;&#x4E2A;&#x6253;&#x5305;&#x6A21;&#x5F0F;
            default:
                NALUnit = new byte[4+rtpPackage.data.length];
                NALUnit[0] = 0x00;
                NALUnit[1] = 0x00;
                NALUnit[2] = 0x00;
                NALUnit[3] = 0x01;
                System.arraycopy(rtpPackage.data,0,NALUnit,4,rtpPackage.data.length);
                NALEndFlag = true;
                break;
        }
        if(NALEndFlag)  {
           return  NALUnit;
        }else{
            return  null;
        }
    }
    public void stop()  {
        NALUnit = null;
    }
}
</code></pre>
<h3 id="&#x4F7F;&#x7528;&#x65B9;&#x6CD5;"><a name="&#x4F7F;&#x7528;&#x65B9;&#x6CD5;" class="anchor-navigation-ex-anchor" href="#&#x4F7F;&#x7528;&#x65B9;&#x6CD5;"><i class="fa fa-link" aria-hidden="true"></i></a>6.4.1. &#x4F7F;&#x7528;&#x65B9;&#x6CD5;</h3>
<pre><code class="lang-text">boolean isTCPtranslate = false ; //false  true
String hostIp =&quot;192.168.1.235&quot;;
int port= 554 ;
String rtspUrl =&quot;rtsp://192.168.1.235:554/&quot;;
String authorName=null ;
String authorPassword=null ;
RtspClient rtspClient = new RtspClient( isTCPtranslate,  hostIp, port,  rtspUrl , authorName, authorPassword);
rtspClient.openRtspCline();

//&#x8BF7;&#x6C42;options
rtspClient.doOption();
//&#x8BF7;&#x6C42;describe
rtspClient.doDescribe();
//&#x8BF7;&#x6C42;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;(&#x6B64;&#x9636;&#x6BB5;&#x6307;&#x660E;&#x7528;Tcp&#x6216;UDP&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;)
rtspClient.doSetup();
//&#x8BF7;&#x6C42;&#x5F00;&#x59CB;&#x4E0B;&#x53D1;Rtp&#x5305;
rtspClient.doPlay();

//&#x5F00;&#x542F;&#x5B50;&#x7EBF;&#x7A0B;&#x63A5;&#x6536;RTP&#x6570;&#x636E;
 byte[] rtpData =rtspClient.getRtpData() ;
//&#x5BF9;Rtp&#x6570;&#x636E;&#x8FDB;&#x884C;&#x89E3;&#x6790;&#xFF0C;&#x83B7;&#x5F97;H264&#x6570;&#x636E;
byte[] nalu= rtp2NaluTools.rtpPackage2NALU(rtpData) ;
</code></pre>
<h1 id="yuv"><a name="yuv" class="anchor-navigation-ex-anchor" href="#yuv"><i class="fa fa-link" aria-hidden="true"></i></a>7. YUV</h1>
<p>&#x4E0E;RGB&#x7C7B;&#x4F3C;&#xFF0C;YUV&#x662F;&#x4E00;&#x79CD;&#x989C;&#x8272;&#x7F16;&#x7801;&#x65B9;&#x6CD5;&#xFF0C;&#x5B83;&#x5C06;&#x4EAE;&#x5EA6;&#x4FE1;&#x606F;&#xFF08;Y&#xFF09;&#x4E0E;&#x8272;&#x5F69;&#x4FE1;&#x606F;&#xFF08;UV&#xFF09;&#x5206;&#x79BB;&#xFF0C;&#x6CA1;&#x6709;UV&#x4FE1;&#x606F;&#x4E00;&#x6837;&#x53EF;&#x4EE5;&#x663E;&#x793A;&#x5B8C;&#x6574;&#x7684;&#xFF08;&#x9ED1;&#x767D;&#x7684;&#xFF09;&#x56FE;&#x50CF;&#x3002;  YUV&#x56FE;&#x50CF;&#x67E5;&#x770B;&#x5DE5;&#x5177; <a href="">yuvplayer.exe</a></p>
<pre><code class="lang-text">Y &#xFF1A;    &#x660E;&#x4EAE;&#x5EA6;&#xFF08;Luminance&#x6216;Luma&#xFF09;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x7070;&#x5EA6;&#x503C;&#xFF1B;
U&#x548C;V &#xFF1A; &#x8272;&#x5EA6;&#xFF08;Chrominance&#x6216;Chroma&#xFF09;&#xFF0C;&#x63CF;&#x8FF0;&#x5F71;&#x50CF;&#x8272;&#x5F69;&#x53CA;&#x9971;&#x548C;&#x5EA6;&#xFF0C;&#x7528;&#x4E8E;&#x6307;&#x5B9A;&#x50CF;&#x7D20;&#x7684;&#x989C;&#x8272;&#x3002;
</code></pre>
<h2 id="yuv&#x6570;&#x636E;&#x7684;&#x91C7;&#x96C6;&#x65B9;&#x5F0F;"><a name="yuv&#x6570;&#x636E;&#x7684;&#x91C7;&#x96C6;&#x65B9;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#yuv&#x6570;&#x636E;&#x7684;&#x91C7;&#x96C6;&#x65B9;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>7.1. YUV&#x6570;&#x636E;&#x7684;&#x91C7;&#x96C6;&#x65B9;&#x5F0F;</h2>
<table>
<thead>
<tr>
<th>&#x91C7;&#x96C6;&#x65B9;&#x5F0F;</th>
<th>&#x7279;&#x70B9;</th>
<th>&#x5176;&#x4ED6;</th>
</tr>
</thead>
<tbody>
<tr>
<td>YUV 4:4:4</td>
<td>&#x6BCF;&#x4E00;&#x4E2A;Y&#x5BF9;&#x5E94;&#x4E00;&#x7EC4;UV&#x5206;&#x91CF;</td>
<td>YUV444</td>
</tr>
<tr>
<td>YUV 4:2:2</td>
<td>&#x6BCF;&#x4E24;&#x4E2A;Y&#x5171;&#x7528;&#x4E00;&#x7EC4;UV&#x5206;&#x91CF;</td>
<td>YUV422</td>
</tr>
<tr>
<td>YUV 4:2:0</td>
<td>&#x6BCF;&#x56DB;&#x4E2A;Y&#x5171;&#x7528;&#x4E00;&#x7EC4;UV&#x5206;&#x91CF;</td>
<td>YUV420</td>
</tr>
</tbody>
</table>
<h2 id="yuv&#x683C;&#x5F0F;&#x7C7B;&#x578B;"><a name="yuv&#x683C;&#x5F0F;&#x7C7B;&#x578B;" class="anchor-navigation-ex-anchor" href="#yuv&#x683C;&#x5F0F;&#x7C7B;&#x578B;"><i class="fa fa-link" aria-hidden="true"></i></a>7.2. yuv&#x683C;&#x5F0F;&#x7C7B;&#x578B;</h2>
<table>
<thead>
<tr>
<th>YUV &#x683C;&#x5F0F;</th>
<th>&#x6392;&#x5217;</th>
<th>&#x6240;&#x5C5E;&#x5927;&#x7C7B;</th>
</tr>
</thead>
<tbody>
<tr>
<td>YU12</td>
<td>YYYY YYYY UU VV</td>
<td>YUV420</td>
</tr>
<tr>
<td>I420</td>
<td>YYYY YYYY UU VV</td>
<td>YUV420</td>
</tr>
<tr>
<td>YV12</td>
<td>YYYY YYYY VV UU</td>
<td>YUV420</td>
</tr>
<tr>
<td>NV12</td>
<td>YYYY YYYY UV UV</td>
<td>YUV420</td>
</tr>
<tr>
<td>NV21</td>
<td>YYYY YYYY VU VU</td>
<td>YUV420</td>
</tr>
<tr>
<td>YUYV</td>
<td>YUYV YUYV YUYV YUYV</td>
<td>YUV422</td>
</tr>
<tr>
<td>YUY2</td>
<td>YUYV YUYV YUYV YUYV</td>
<td>YUV422</td>
</tr>
<tr>
<td>UYVY</td>
<td>UYVY UYVY UYVY UYVY</td>
<td>YUV422</td>
</tr>
<tr>
<td>YUV422P</td>
<td>YYYY YYYY UUUU VVVV</td>
<td>YUV422</td>
</tr>
</tbody>
</table>
<h1 id="&#x97F3;&#x89C6;&#x9891;-&#x5F00;&#x53D1;&#x8981;&#x70B9;"><a name="&#x97F3;&#x89C6;&#x9891;-&#x5F00;&#x53D1;&#x8981;&#x70B9;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x89C6;&#x9891;-&#x5F00;&#x53D1;&#x8981;&#x70B9;"><i class="fa fa-link" aria-hidden="true"></i></a>8. &#x97F3;&#x89C6;&#x9891; &#x5F00;&#x53D1;&#x8981;&#x70B9;</h1>
<h2 id="&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x4E3B;&#x8981;&#x5185;&#x5BB9;"><a name="&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x4E3B;&#x8981;&#x5185;&#x5BB9;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x4E3B;&#x8981;&#x5185;&#x5BB9;"><i class="fa fa-link" aria-hidden="true"></i></a>8.1. &#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x4E3B;&#x8981;&#x5185;&#x5BB9;</h2>
<pre><code class="lang-text">1&#x3001;&#x97F3;&#x9891;&#x91C7;&#x96C6;/&#x64AD;&#x653E;
2&#x3001;&#x97F3;&#x9891;&#x7B97;&#x6CD5;&#x5904;&#x7406;
   &#x53BB;&#x566A;&#x3001;&#x9759;&#x97F3;&#x68C0;&#x6D4B;&#x3001;&#x56DE;&#x58F0;&#x6D88;&#x9664;&#x3001;&#x97F3;&#x6548;&#x5904;&#x7406;&#x3001;&#x529F;&#x653E;/&#x589E;&#x5F3A;&#x3001;&#x6DF7;&#x97F3;/&#x5206;&#x79BB;
3&#x3001;&#x97F3;&#x9891;&#x7684;&#x7F16;&#x89E3;&#x7801;&#x548C;&#x683C;&#x5F0F;&#x8F6C;&#x6362;
4&#x3001;&#x97F3;&#x9891;&#x4F20;&#x8F93;&#x534F;&#x8BAE;&#x7684;&#x5F00;&#x53D1;
SIP&#xFF0C;A2DP&#x3001;AVRCP
</code></pre>
<h2 id="&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x5EF6;&#x65F6;&#x6807;&#x51C6;"><a name="&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x5EF6;&#x65F6;&#x6807;&#x51C6;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x5EF6;&#x65F6;&#x6807;&#x51C6;"><i class="fa fa-link" aria-hidden="true"></i></a>8.2. &#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x5EF6;&#x65F6;&#x6807;&#x51C6;</h2>
<pre><code class="lang-c++">ITU-TG<span class="hljs-number">.114</span>&#x89C4;&#x5B9A;&#xFF0C;&#x5BF9;&#x4E8E;&#x9AD8;&#x8D28;&#x91CF;&#x8BED;&#x97F3;&#x53EF;&#x63A5;&#x53D7;&#x7684;&#x65F6;&#x5EF6;&#x662F;<span class="hljs-number">300</span>ms&#x3002;
&#x4E00;&#x822C;&#x6765;&#x8BF4;&#xFF0C;&#x5982;&#x679C;&#x65F6;&#x5EF6;&#x5728;<span class="hljs-number">300</span>&#xFF5E;<span class="hljs-number">400</span>ms&#xFF0C;&#x901A;&#x8BDD;&#x7684;&#x4EA4;&#x4E92;&#x6027;&#x6BD4;&#x8F83;&#x5DEE;&#xFF0C;&#x4F46;&#x8FD8;&#x53EF;&#x4EE5;&#x63A5;&#x53D7;&#x3002;
&#x65F6;&#x5EF6;&#x5927;&#x4E8E;<span class="hljs-number">400</span>ms&#x65F6;&#xFF0C;&#x5219;&#x4EA4;&#x4E92;&#x901A;&#x4FE1;&#x975E;&#x5E38;&#x56F0;&#x96BE;&#x3002;
</code></pre>
<h2 id="&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x96BE;&#x70B9;"><a name="&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x96BE;&#x70B9;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x96BE;&#x70B9;"><i class="fa fa-link" aria-hidden="true"></i></a>8.3. &#x97F3;&#x9891;&#x5F00;&#x53D1;&#x7684;&#x96BE;&#x70B9;</h2>
<pre><code class="lang-text">&#x5EF6;&#x65F6;&#x654F;&#x611F;&#x3001;&#x5361;&#x987F;&#x654F;&#x611F;&#x3001;&#x566A;&#x58F0;&#x6291;&#x5236;&#xFF08;Denoise&#xFF09;&#x3001;
&#x56DE;&#x58F0;&#x6D88;&#x9664;&#xFF08;AEC&#xFF09;&#x3001;&#x9759;&#x97F3;&#x68C0;&#x6D4B;&#xFF08;VAD&#xFF09;&#x3001;&#x6DF7;&#x97F3;&#x7B97;&#x6CD5;
</code></pre>
<h3 id="&#x5E38;&#x7528;&#x663E;&#x793A;&#x63A7;&#x4EF6;"><a name="&#x5E38;&#x7528;&#x663E;&#x793A;&#x63A7;&#x4EF6;" class="anchor-navigation-ex-anchor" href="#&#x5E38;&#x7528;&#x663E;&#x793A;&#x63A7;&#x4EF6;"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.1. &#x5E38;&#x7528;&#x663E;&#x793A;&#x63A7;&#x4EF6;</h3>
<pre><code class="lang-text">// SurfaceView  
Android 1.0 ,  extends View &#x3002;&#x672C;&#x8D28;&#x4E0A;&#x662F;&#x4E00;&#x4E2A;View&#x3002;&#x4E0E;&#x666E;&#x901A;View&#x4E0D;&#x540C;&#x7684;&#x662F;&#xFF0C;&#x5B83;&#x6709;&#x81EA;&#x5DF1;&#x7684;Surface&#x3002;

// GLSurfaceView  
Android 1.5  &#xFF0C; extends SurfaceView &#x3002; &#x5728;SurfaceView&#x7684;&#x57FA;&#x7840;&#x4E0A;&#xFF0C;&#x5B83;&#x52A0;&#x5165;&#x4E86;EGL&#x7684;&#x7BA1;&#x7406;&#xFF0C;
&#x5E76;&#x81EA;&#x5E26;&#x4E86;&#x6E32;&#x67D3;&#x7EBF;&#x7A0B;&#x3002;&#x53E6;&#x5916;&#x5B83;&#x5B9A;&#x4E49;&#x4E86;&#x7528;&#x6237;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x7684;Render&#x63A5;&#x53E3;&#x3002;

// SurfaceTexture  
Android 3.0 &#xFF0C; extends &#x65E0; &#x3002; &#x5B83;&#x5BF9;&#x56FE;&#x50CF;&#x6D41;&#x7684;&#x5904;&#x7406;&#x5E76;&#x4E0D;&#x76F4;&#x63A5;&#x663E;&#x793A;&#xFF0C;&#x800C;&#x662F;&#x8F6C;&#x4E3A;GL&#x5916;&#x90E8;&#x7EB9;&#x7406;&#xFF0C;
&#x56E0;&#x6B64;&#x53EF;&#x7528;&#x4E8E;&#x56FE;&#x50CF;&#x6D41;&#x6570;&#x636E;&#x7684;&#x4E8C;&#x6B21;&#x5904;&#x7406;&#xFF08;&#x5982;Camera&#x6EE4;&#x955C;&#xFF0C;&#x684C;&#x9762;&#x7279;&#x6548;&#x7B49;&#xFF09;

// TextureView  
Android 4.0 &#xFF0C;extends View &#x3002; &#x666E;&#x901A;View&#xFF0C;&#x53EF;&#x4EE5;&#x548C;&#x5176;&#x5B83;&#x666E;&#x901A;View&#x4E00;&#x6837;&#x8FDB;&#x884C;&#x79FB;&#x52A8;&#xFF0C;&#x65CB;&#x8F6C;&#xFF0C;&#x7F29;&#x653E;&#xFF0C;&#x52A8;&#x753B;&#x7B49;&#x53D8;&#x5316;&#x3002;
TextureView&#x5FC5;&#x987B;&#x5728;&#x786C;&#x4EF6;&#x52A0;&#x901F;&#x7684;&#x7A97;&#x53E3;&#x4E2D;&#x3002;
android:hardwareAccelerated=&quot;true&quot;

// Surface  
Android 1.0 &#xFF0C; extends &#x65E0;  &#x3002; 
Surface &#x5185;&#x90E8;&#x7EF4;&#x62A4;&#x4E86;&#x56FE;&#x50CF; buffer &#x5BF9;&#x8C61;&#xFF0C;&#x6700;&#x7EC8;&#x4EA4;&#x7531; SufaceFlinger &#x5408;&#x6210;&#x663E;&#x793A;&#x3002;
</code></pre>
<h2 id="&#x97F3;&#x89C6;&#x9891;&#x672F;&#x8BED;"><a name="&#x97F3;&#x89C6;&#x9891;&#x672F;&#x8BED;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x89C6;&#x9891;&#x672F;&#x8BED;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4. &#x97F3;&#x89C6;&#x9891;&#x672F;&#x8BED;</h2>
<h3 id="&#x91C7;&#x6837;&#x7387;&#xFF08;samplerate&#xFF09;"><a name="&#x91C7;&#x6837;&#x7387;&#xFF08;samplerate&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x91C7;&#x6837;&#x7387;&#xFF08;samplerate&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.1. &#x91C7;&#x6837;&#x7387;&#xFF08;samplerate&#xFF09;</h3>
<pre><code class="lang-text">&#x91C7;&#x6837;&#x9891;&#x7387;&#x8D8A;&#x9AD8;&#xFF0C;&#x8BB0;&#x5F55;&#x8FD9;&#x4E00;&#x6BB5;&#x97F3;&#x9891;&#x4FE1;&#x53F7;&#x6240;&#x7528;&#x7684;&#x6570;&#x636E;&#x91CF;&#x5C31;&#x8D8A;&#x5927;&#xFF0C;&#x540C;&#x65F6;&#x97F3;&#x9891;&#x8D28;&#x91CF;&#x4E5F;&#x5C31;&#x8D8A;&#x9AD8;&#x3002;
&#x6839;&#x636E;&#x5948;&#x594E;&#x65AF;&#x7279;&#x7406;&#x8BBA;&#xFF0C;&#x91C7;&#x6837;&#x9891;&#x7387;&#x53EA;&#x8981;&#x4E0D;&#x4F4E;&#x4E8E;&#x97F3;&#x9891;&#x4FE1;&#x53F7;&#x6700;&#x9AD8;&#x9891;&#x7387;&#x7684;&#x4E24;&#x500D;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x65E0;&#x635F;&#x5931;&#x5730;&#x8FD8;&#x539F;&#x539F;&#x59CB;&#x7684;&#x58F0;&#x97F3;&#x3002;

&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;&#x58F0;&#x97F3;&#x4E0D;&#x5931;&#x771F;&#xFF0C;&#x91C7;&#x6837;&#x9891;&#x7387;&#x5E94;&#x5728;40kHz&#x4EE5;&#x4E0A;&#x3002;
&#x5E38;&#x7528;&#x7684;&#x97F3;&#x9891;&#x91C7;&#x6837;&#x9891;&#x7387;&#x6709;&#xFF1A;
8kHz&#x3001;11.025kHz&#x3001;22.05kHz&#x3001;16kHz&#x3001;37.8kHz&#x3001;44.1kHz&#x3001;48kHz&#x3001;96kHz&#x3001;192kHz
</code></pre>
<h3 id="&#x91CF;&#x5316;&#x7CBE;&#x5EA6;&#xFF08;&#x4F4D;&#x5BBD;&#xFF09;"><a name="&#x91CF;&#x5316;&#x7CBE;&#x5EA6;&#xFF08;&#x4F4D;&#x5BBD;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x91CF;&#x5316;&#x7CBE;&#x5EA6;&#xFF08;&#x4F4D;&#x5BBD;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.2. &#x91CF;&#x5316;&#x7CBE;&#x5EA6;&#xFF08;&#x4F4D;&#x5BBD;&#xFF09;</h3>
<pre><code class="lang-text">&#x4F4D;&#x6570;&#x8D8A;&#x591A;&#xFF0C;&#x8868;&#x793A;&#x5F97;&#x5C31;&#x8D8A;&#x7CBE;&#x7EC6;&#xFF0C;&#x58F0;&#x97F3;&#x8D28;&#x91CF;&#x5C31;&#x8D8A;&#x597D;&#xFF0C;&#x6570;&#x636E;&#x91CF;&#x4E5F;&#x4F1A;&#x8D8A;&#x5927;&#x3002;

&#x6570;&#x636E;&#x7C7B;&#x578B;&#x5927;&#x5C0F;&#x53EF;&#x4EE5;&#x662F;&#xFF1A;
4bit&#x3001;8bit&#x3001;16bit&#x3001;32bit
&#x5E38;&#x89C1;&#x7684;&#x4F4D;&#x5BBD;&#x662F;&#xFF1A;8bit &#x6216;&#x8005; 16bit
</code></pre>
<h3 id="&#x590D;&#x7528;&#x89E3;&#x590D;&#x7528;&#xFF1A;"><a name="&#x590D;&#x7528;&#x89E3;&#x590D;&#x7528;&#xFF1A;" class="anchor-navigation-ex-anchor" href="#&#x590D;&#x7528;&#x89E3;&#x590D;&#x7528;&#xFF1A;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.3. &#x590D;&#x7528;/&#x89E3;&#x590D;&#x7528;&#xFF1A;</h3>
<pre><code class="lang-text">&#x5C06;&#x97F3;&#x9891;&#x3001;&#x89C6;&#x5C4F;&#x3001;&#x5B57;&#x5E55;&#x6570;&#x636E;&#x653E;&#x5728;&#x4E00;&#x6761;&#x94FE;&#x8DEF;&#x4E0A;&#x4F20;&#x8FC7;&#x6765;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x60F3;&#x529E;&#x6CD5;&#x5206;&#x5F00;&#x3002;
</code></pre>
<h3 id="&#x58F0;&#x9053;&#x6570;&#xFF08;channels&#xFF09;"><a name="&#x58F0;&#x9053;&#x6570;&#xFF08;channels&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x58F0;&#x9053;&#x6570;&#xFF08;channels&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.4. &#x58F0;&#x9053;&#x6570;&#xFF08;channels&#xFF09;</h3>
<pre><code class="lang-text">&#x7531;&#x4E8E;&#xFF0C;&#x97F3;&#x9891;&#x7684;&#x91C7;&#x96C6;&#x548C;&#x64AD;&#x653E;&#x662F;&#x53EF;&#x4EE5;&#x53E0;&#x52A0;&#x7684;&#xFF0C;
&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x4ECE;&#x591A;&#x4E2A;&#x97F3;&#x9891;&#x6E90;&#x91C7;&#x96C6;&#x58F0;&#x97F3;&#xFF0C;&#x5E76;&#x5206;&#x522B;&#x8F93;&#x51FA;&#x5230;&#x4E0D;&#x540C;&#x7684;&#x626C;&#x58F0;&#x5668;&#xFF0C;
&#x6545;&#x58F0;&#x9053;&#x6570;&#x4E00;&#x822C;&#x8868;&#x793A;&#x58F0;&#x97F3;&#x5F55;&#x5236;&#x65F6;&#x7684;&#x97F3;&#x6E90;&#x6570;&#x91CF;&#x6216;&#x56DE;&#x653E;&#x65F6;&#x76F8;&#x5E94;&#x7684;&#x626C;&#x58F0;&#x5668;&#x6570;&#x91CF;&#x3002;

&#x5355;&#x58F0;&#x9053;&#xFF08;Mono&#xFF09;&#x548C;&#x53CC;&#x58F0;&#x9053;&#xFF08;Stereo&#xFF09;&#x6BD4;&#x8F83;&#x5E38;&#x89C1;&#x3002;
</code></pre>
<h3 id="&#x91CD;&#x91C7;&#x6837;"><a name="&#x91CD;&#x91C7;&#x6837;" class="anchor-navigation-ex-anchor" href="#&#x91CD;&#x91C7;&#x6837;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.5. &#x91CD;&#x91C7;&#x6837;</h3>
<pre><code class="lang-text">&#x628A;&#x76EE;&#x6807;&#x97F3;&#x9891;&#x6309;&#x7167;&#x4E00;&#x5B9A;&#x7684;&#x683C;&#x5F0F;&#x91CD;&#x65B0;&#x91C7;&#x6837;&#x7F16;&#x7801;&#x6210;&#x65B0;&#x7684;&#x97F3;&#x9891;&#x6570;&#x636E;&#xFF0C;
&#x65B9;&#x4FBF;&#x7EDF;&#x4E00;&#x5904;&#x7406;&#xFF0C;&#x4E00;&#x822C;&#x7684;&#x91C7;&#x6837;&#x6807;&#x51C6;&#x662F;&#xFF1A;44100HZ&#x3001;16bit&#x3001;&#x53CC;&#x58F0;&#x9053; &#x3002;

&#x56E0;&#x4E3A;&#x9700;&#x8981;&#x64AD;&#x653E;&#x7684;&#x97F3;&#x9891;&#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;
&#x6211;&#x4EEC;&#x4E5F;&#x4E0D;&#x53EF;&#x80FD;&#x4E3A;&#x6BCF;&#x4E00;&#x79CD;&#x97F3;&#x9891;&#x5199;&#x4E00;&#x4E2A;&#x5904;&#x7406;&#x7A0B;&#x5E8F;&#xFF0C;&#x6240;&#x4EE5;&#x8981;&#x6309;&#x7167;&#x81EA;&#x5DF1;&#x7684;&#x6807;&#x51C6;&#x91CD;&#x65B0;&#x91C7;&#x6837;&#x3002;
</code></pre>
<h3 id="&#x58F0;&#x9053;&#x5E03;&#x5C40;"><a name="&#x58F0;&#x9053;&#x5E03;&#x5C40;" class="anchor-navigation-ex-anchor" href="#&#x58F0;&#x9053;&#x5E03;&#x5C40;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.6. &#x58F0;&#x9053;&#x5E03;&#x5C40;</h3>
<pre><code class="lang-text">&#x5F53;&#x6709;&#x591A;&#x4E2A;&#x53D1;&#x97F3;&#x6E90;&#x65F6;&#xFF0C;&#x591A;&#x4E2A;&#x626C;&#x58F0;&#x5668;&#x7684;&#x6446;&#x653E;&#x4F4D;&#x7F6E;&#x53EF;&#x4EE5;&#x7EC4;&#x6210;&#x90A3;&#x79CD;&#x524D;&#x540E;&#x3001;&#x5DE6;&#x53F3;&#x3001;&#x73AF;&#x7ED5;&#x7B49;&#x5E03;&#x5C40;...
</code></pre>
<h3 id="&#x97F3;&#x9891;&#x5E27;"><a name="&#x97F3;&#x9891;&#x5E27;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x9891;&#x5E27;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.7. &#x97F3;&#x9891;&#x5E27;</h3>
<pre><code class="lang-text">&#x97F3;&#x9891;&#x6570;&#x636E;&#x662F;&#x6D41;&#x5F0F;&#x7684;&#xFF0C;&#x672C;&#x8EAB;&#x6CA1;&#x6709;&#x660E;&#x786E;&#x7684;&#x4E00;&#x5E27;&#x5E27;&#x7684;&#x6982;&#x5FF5;&#xFF0C;
&#x5728;&#x5B9E;&#x9645;&#x7684;&#x5E94;&#x7528;&#x4E2D;&#xFF0C;&#x4E3A;&#x4E86;&#x97F3;&#x9891;&#x7B97;&#x6CD5;&#x5904;&#x7406;/&#x4F20;&#x8F93;&#x7684;&#x65B9;&#x4FBF;&#xFF0C;&#x4E00;&#x822C;&#x7EA6;&#x5B9A;&#x4FD7;&#x6210;&#x53D6;2.5ms~60ms&#x4E3A;&#x5355;&#x4F4D;&#x7684;&#x6570;&#x636E;&#x91CF;&#x4E3A;&#x4E00;&#x5E27;&#x97F3;&#x9891;&#x3002;

&#x8FD9;&#x4E2A;&#x65F6;&#x95F4;&#x88AB;&#x79F0;&#x4E4B;&#x4E3A;&#x201C;&#x91C7;&#x6837;&#x65F6;&#x95F4;&#x201D;&#xFF0C;&#x5176;&#x957F;&#x5EA6;&#x6CA1;&#x6709;&#x7279;&#x522B;&#x7684;&#x6807;&#x51C6;&#xFF0C;&#x5B83;&#x662F;&#x6839;&#x636E;&#x7F16;&#x89E3;&#x7801;&#x5668;&#x548C;&#x5177;&#x4F53;&#x5E94;&#x7528;&#x7684;&#x9700;&#x6C42;&#x6765;&#x51B3;&#x5B9A;&#x7684;&#xFF0C;
&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x8BA1;&#x7B97;&#x4E00;&#x4E0B;&#x4E00;&#x5E27;&#x97F3;&#x9891;&#x5E27;&#x7684;&#x5927;&#x5C0F;&#xFF1A;

&#x5047;&#x8BBE;&#x67D0;&#x97F3;&#x9891;&#x4FE1;&#x53F7;&#x662F;&#x91C7;&#x6837;&#x7387;&#x4E3A;8kHz&#x3001;&#x53CC;&#x901A;&#x9053;&#x3001;&#x4F4D;&#x5BBD;&#x4E3A;16bit&#xFF0C;20ms&#x4E00;&#x5E27;&#xFF0C;&#x5219;&#x4E00;&#x5E27;&#x97F3;&#x9891;&#x6570;&#x636E;&#x7684;&#x5927;&#x5C0F;&#x4E3A;&#xFF1A;
int size = 8000 x 2 x 16bit x 0.02s = 5120 bit = 640 byte
</code></pre>
<h3 id="&#x97F3;&#x8C03;-&#x3001;&#x97F3;&#x901F;"><a name="&#x97F3;&#x8C03;-&#x3001;&#x97F3;&#x901F;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x8C03;-&#x3001;&#x97F3;&#x901F;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.8. &#x97F3;&#x8C03; &#x3001;&#x97F3;&#x901F;</h3>
<pre><code class="lang-text">&#x97F3;&#x8C03;(Pitch)&#xFF1A;&#x97F3;&#x8C03;&#x4E0E;&#x58F0;&#x97F3;&#x7684;&#x9891;&#x7387;&#x6709;&#x5173; &#xFF0C; &#x58F0;&#x97F3;&#x9891;&#x7387;&#x8D8A;&#x5927;&#x65F6;&#xFF0C;&#x97F3;&#x8C03;&#x5C31;&#x8D8A;&#x9AD8; &#x3002;
&#x97F3;&#x901F; &#xFF1A;&#x64AD;&#x653E;&#x901F;&#x5EA6;&#x3002;
</code></pre>
<h3 id="&#x89E3;&#x534F;&#x8BAE;"><a name="&#x89E3;&#x534F;&#x8BAE;" class="anchor-navigation-ex-anchor" href="#&#x89E3;&#x534F;&#x8BAE;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.9. &#x89E3;&#x534F;&#x8BAE;</h3>
<pre><code class="lang-text">&#x5C31;&#x662F;&#x5C06;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x89E3;&#x6790;&#x4E3A;&#x6807;&#x51C6;&#x7684;&#x76F8;&#x5E94;&#x7684;&#x5C01;&#x88C5;&#x683C;&#x5F0F;&#x6570;&#x636E;&#x3002;
&#x89C6;&#x97F3;&#x9891;&#x5728;&#x7F51;&#x7EDC;&#x4E0A;&#x4F20;&#x64AD;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5E38;&#x5E38;&#x91C7;&#x7528;&#x5404;&#x79CD;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;&#xFF0C;&#x4F8B;&#x5982;HTTP&#xFF0C;RTMP&#xFF0C;&#x6216;&#x662F;MMS&#x7B49;&#x7B49;&#x3002;
&#x8FD9;&#x4E9B;&#x534F;&#x8BAE;&#x5728;&#x4F20;&#x8F93;&#x89C6;&#x97F3;&#x9891;&#x6570;&#x636E;&#x7684;&#x540C;&#x65F6;&#xFF0C;&#x4E5F;&#x4F1A;&#x4F20;&#x8F93;&#x4E00;&#x4E9B;&#x4FE1;&#x4EE4;&#x6570;&#x636E;&#x3002;
&#x8FD9;&#x4E9B;&#x4FE1;&#x4EE4;&#x6570;&#x636E;&#x5305;&#x62EC;&#x5BF9;&#x64AD;&#x653E;&#x7684;&#x63A7;&#x5236;&#xFF08;&#x64AD;&#x653E;&#xFF0C;&#x6682;&#x505C;&#xFF0C;&#x505C;&#x6B62;&#xFF09;&#xFF0C;&#x6216;&#x8005;&#x5BF9;&#x7F51;&#x7EDC;&#x72B6;&#x6001;&#x7684;&#x63CF;&#x8FF0;&#x7B49;&#x3002;
&#x89E3;&#x534F;&#x8BAE;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#x4F1A;&#x53BB;&#x9664;&#x6389;&#x4FE1;&#x4EE4;&#x6570;&#x636E;&#x800C;&#x53EA;&#x4FDD;&#x7559;&#x89C6;&#x97F3;&#x9891;&#x6570;&#x636E;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x91C7;&#x7528;RTMP&#x534F;&#x8BAE;&#x4F20;&#x8F93;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x7ECF;&#x8FC7;&#x89E3;&#x534F;&#x8BAE;&#x64CD;&#x4F5C;&#x540E;&#xFF0C;&#x8F93;&#x51FA;FLV&#x683C;&#x5F0F;&#x7684;&#x6570;&#x636E;&#x3002;
</code></pre>
<h3 id="&#x89E3;&#x5C01;&#x88C5;"><a name="&#x89E3;&#x5C01;&#x88C5;" class="anchor-navigation-ex-anchor" href="#&#x89E3;&#x5C01;&#x88C5;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.10. &#x89E3;&#x5C01;&#x88C5;</h3>
<pre><code class="lang-text">&#x5C31;&#x662F;&#x5C06;&#x8F93;&#x5165;&#x7684;&#x5C01;&#x88C5;&#x683C;&#x5F0F;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5206;&#x79BB;&#x6210;&#x4E3A;&#x97F3;&#x9891;&#x6D41;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x6570;&#x636E;&#x548C;&#x89C6;&#x9891;&#x6D41;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x6570;&#x636E;&#x3002;
&#x5C01;&#x88C5;&#x683C;&#x5F0F;&#x79CD;&#x7C7B;&#x5F88;&#x591A;&#xFF0C;&#x4F8B;&#x5982;MP4&#xFF0C;MKV&#xFF0C;RMVB&#xFF0C;TS&#xFF0C;FLV&#xFF0C;AVI&#x7B49;&#x7B49;&#xFF0C;&#x5B83;&#x7684;&#x4F5C;&#x7528;&#x5C31;&#x662F;&#x5C06;&#x5DF2;&#x7ECF;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x7684;&#x89C6;&#x9891;&#x6570;&#x636E;&#x548C;&#x97F3;&#x9891;&#x6570;&#x636E;&#x6309;&#x7167;&#x4E00;&#x5B9A;&#x7684;&#x683C;&#x5F0F;&#x653E;&#x5230;&#x4E00;&#x8D77;&#x3002;
&#x4F8B;&#x5982;&#xFF0C;FLV&#x683C;&#x5F0F;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x7ECF;&#x8FC7;&#x89E3;&#x5C01;&#x88C5;&#x64CD;&#x4F5C;&#x540E;&#xFF0C;&#x8F93;&#x51FA;H.264&#x7F16;&#x7801;&#x7684;&#x89C6;&#x9891;&#x7801;&#x6D41;&#x548C;AAC&#x7F16;&#x7801;&#x7684;&#x97F3;&#x9891;&#x7801;&#x6D41;&#x3002;
</code></pre>
<h3 id="&#x89E3;&#x7801;"><a name="&#x89E3;&#x7801;" class="anchor-navigation-ex-anchor" href="#&#x89E3;&#x7801;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.11. &#x89E3;&#x7801;</h3>
<pre><code class="lang-text">&#x89E3;&#x7801;&#x662F;&#x6574;&#x4E2A;&#x7CFB;&#x7EDF;&#x4E2D;&#x6700;&#x91CD;&#x8981;&#x4E5F;&#x662F;&#x6700;&#x590D;&#x6742;&#x7684;&#x4E00;&#x4E2A;&#x73AF;&#x8282;&#x3002;
&#x5C31;&#x662F;&#x5C06;&#x89C6;&#x9891;/&#x97F3;&#x9891;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x6570;&#x636E;&#xFF0C;&#x89E3;&#x7801;&#x6210;&#x4E3A;&#x975E;&#x538B;&#x7F29;&#x7684;&#x89C6;&#x9891;/&#x97F3;&#x9891;&#x539F;&#x59CB;&#x6570;&#x636E;&#x3002;
&#x97F3;&#x9891;&#x7684;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x6807;&#x51C6;&#x5305;&#x542B;AAC&#xFF0C;MP3&#xFF0C;AC-3&#x7B49;&#x7B49;&#xFF0C;&#x89C6;&#x9891;&#x7684;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x6807;&#x51C6;&#x5219;&#x5305;&#x542B;H.264&#xFF0C;MPEG2&#xFF0C;VC-1&#x7B49;&#x7B49;&#x3002;
&#x901A;&#x8FC7;&#x89E3;&#x7801;&#xFF0C;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x7684;&#x89C6;&#x9891;&#x6570;&#x636E;&#x8F93;&#x51FA;&#x6210;&#x4E3A;&#x975E;&#x538B;&#x7F29;&#x7684;&#x989C;&#x8272;&#x6570;&#x636E;&#xFF0C;
&#x4F8B;&#x5982;YUV420P&#xFF0C;RGB&#x7B49;&#x7B49;&#xFF1B;&#x538B;&#x7F29;&#x7F16;&#x7801;&#x7684;&#x97F3;&#x9891;&#x6570;&#x636E;&#x8F93;&#x51FA;&#x6210;&#x4E3A;&#x975E;&#x538B;&#x7F29;&#x7684;&#x97F3;&#x9891;&#x62BD;&#x6837;&#x6570;&#x636E;&#xFF0C;&#x4F8B;&#x5982;PCM&#x6570;&#x636E;&#x3002;
</code></pre>
<h3 id="&#x89C6;&#x97F3;&#x9891;&#x540C;&#x6B65;"><a name="&#x89C6;&#x97F3;&#x9891;&#x540C;&#x6B65;" class="anchor-navigation-ex-anchor" href="#&#x89C6;&#x97F3;&#x9891;&#x540C;&#x6B65;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.12. &#x89C6;&#x97F3;&#x9891;&#x540C;&#x6B65;</h3>
<pre><code class="lang-text">&#x5C31;&#x662F;&#x6839;&#x636E;&#x89E3;&#x5C01;&#x88C5;&#x6A21;&#x5757;&#x5904;&#x7406;&#x8FC7;&#x7A0B;&#x4E2D;&#x83B7;&#x53D6;&#x5230;&#x7684;&#x53C2;&#x6570;&#x4FE1;&#x606F;&#xFF0C;
&#x540C;&#x6B65;&#x89E3;&#x7801;&#x51FA;&#x6765;&#x7684;&#x89C6;&#x9891;&#x548C;&#x97F3;&#x9891;&#x6570;&#x636E;&#xFF0C;&#x5E76;&#x5C06;&#x89C6;&#x9891;&#x97F3;&#x9891;&#x6570;&#x636E;&#x9001;&#x81F3;&#x7CFB;&#x7EDF;&#x7684;&#x663E;&#x5361;&#x548C;&#x58F0;&#x5361;&#x64AD;&#x653E;&#x51FA;&#x6765;&#x3002;
</code></pre>
<h3 id="&#x7F51;&#x7EDC;&#x6296;&#x52A8;"><a name="&#x7F51;&#x7EDC;&#x6296;&#x52A8;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x6296;&#x52A8;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.13. &#x7F51;&#x7EDC;&#x6296;&#x52A8;</h3>
<p>&#x6296;&#x52A8;&#x662F;&#x6307;&#x6700;&#x5927;&#x5EF6;&#x8FDF;&#x4E0E;&#x6700;&#x5C0F;&#x5EF6;&#x8FDF;&#x7684;&#x65F6;&#x95F4;&#x5DEE;&#xFF0C;&#x5982;&#x6700;&#x5927;&#x5EF6;&#x8FDF;&#x662F;20&#x6BEB;&#x79D2;&#xFF0C;&#x6700;&#x5C0F;&#x5EF6;&#x8FDF;&#x4E3A;5&#x6BEB;&#x79D2;&#xFF0C;&#x90A3;&#x4E48;&#x7F51;&#x7EDC;&#x6296;&#x52A8;&#x5C31;&#x662F;15&#x6BEB;&#x79D2;&#xFF0C;&#x5B83;&#x4E3B;&#x8981;&#x6807;&#x8BC6;&#x4E00;&#x4E2A;&#x7F51;&#x7EDC;&#x7684;&#x7A33;&#x5B9A;&#x6027;&#x3002;</p>
<h3 id="mtu"><a name="mtu" class="anchor-navigation-ex-anchor" href="#mtu"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.14. MTU</h3>
<pre><code class="lang-text">Maximum Transmission Unit &#x3002;&#x5927;&#x90E8;&#x5206;&#x8BBE;&#x5907;&#x7684;&#x662F;1500byte&#x3002;
&#x5982;&#x679C;&#x672C;&#x673A;&#x7684;MTU&#x6BD4;&#x7F51;&#x5173;&#x7684;MTU&#x5927;&#xFF0C;&#x5927;&#x7684;&#x6570;&#x636E;&#x5305;&#x5C31;&#x4F1A;&#x88AB;&#x62C6;&#x5F00;&#x6765;&#x4F20;&#x9001;&#xFF0C;&#x8FD9;&#x6837;&#x4F1A;&#x4EA7;&#x751F;&#x5F88;&#x591A;&#x6570;&#x636E;&#x5305;&#x788E;&#x7247;&#xFF0C;&#x589E;&#x52A0;&#x4E22;&#x5305;&#x7387;&#xFF0C;&#x964D;&#x4F4E;&#x7F51;&#x7EDC;&#x901F;&#x5EA6;&#x3002;
&#x628A;&#x672C;&#x673A;&#x7684;MTU&#x8BBE;&#x6210;&#x6BD4;&#x7F51;&#x5173;&#x7684;MTU&#x5C0F;&#x6216;&#x76F8;&#x540C;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x51CF;&#x5C11;&#x4E22;&#x5305;&#x3002;
</code></pre>
<h3 id="i&#x5E27;"><a name="i&#x5E27;" class="anchor-navigation-ex-anchor" href="#i&#x5E27;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.15. I&#x5E27;</h3>
<pre><code class="lang-text">&#x5173;&#x952E;&#x5E27;&#x3002; &#x6570;&#x636E;&#x91CF;&#x8F83;&#x5927;&#x3002;
&#x8FD9;&#x4E00;&#x5E27;&#x5355;&#x72EC;&#x5B58;&#x5728;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x4F9D;&#x8D56;&#x5176;&#x4ED6;&#x7684;&#x5E27;&#x5C31;&#x53EF;&#x4EE5;&#x5B8C;&#x6574;&#x663E;&#x793A;&#x3002;
</code></pre>
<h3 id="p&#x5E27;-&#x3001;&#x5DEE;&#x522B;&#x5E27;"><a name="p&#x5E27;-&#x3001;&#x5DEE;&#x522B;&#x5E27;" class="anchor-navigation-ex-anchor" href="#p&#x5E27;-&#x3001;&#x5DEE;&#x522B;&#x5E27;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.16. P&#x5E27; &#x3001;&#x5DEE;&#x522B;&#x5E27;</h3>
<pre><code class="lang-text">&#x8BB0;&#x5F55;&#x8FD9;&#x4E00;&#x5E27;&#x8DDF;&#x4E4B;&#x524D;&#x7684;&#x4E00;&#x4E2A;&#x5E27; &#xFF08;I&#x5E27;&#x6216;P&#x5E27;&#xFF09;&#x7684;&#x5DEE;&#x522B;&#xFF0C;&#x89E3;&#x7801;&#x65F6;&#x9700;&#x8981;&#x7528;&#x4E4B;&#x524D;&#x7F13;&#x5B58;&#x7684;&#x753B;&#x9762;&#x53E0;&#x52A0;&#x4E0A;&#x672C;&#x5E27;&#x5B9A;&#x4E49;&#x7684;&#x5DEE;&#x522B;&#xFF0C;&#x751F;&#x6210;&#x6700;&#x7EC8;&#x753B;&#x9762;&#x3002;
P&#x5E27;&#x6CA1;&#x6709;&#x5B8C;&#x6574;&#x753B;&#x9762;&#x6570;&#x636E;&#xFF0C;&#x53EA;&#x6709;&#x4E0E;&#x524D;&#x4E00;&#x5E27;&#x7684;&#x753B;&#x9762;&#x5DEE;&#x522B;&#x7684;&#x6570;&#x636E;&#x3002;
</code></pre>
<h3 id="b&#x5E27;-&#x3001;&#x53CC;&#x5411;&#x5DEE;&#x522B;&#x5E27;"><a name="b&#x5E27;-&#x3001;&#x53CC;&#x5411;&#x5DEE;&#x522B;&#x5E27;" class="anchor-navigation-ex-anchor" href="#b&#x5E27;-&#x3001;&#x53CC;&#x5411;&#x5DEE;&#x522B;&#x5E27;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.17. B&#x5E27; &#x3001;&#x53CC;&#x5411;&#x5DEE;&#x522B;&#x5E27;</h3>
<pre><code class="lang-text">B&#x5E27;&#x8BB0;&#x5F55;&#x7684;&#x662F;&#x672C;&#x5E27;&#x4E0E;&#x524D;&#x540E;&#x5E27;&#x7684;&#x5DEE;&#x522B;&#x3002;
&#x8981;&#x89E3;&#x7801;B&#x5E27;&#xFF0C;&#x4E0D;&#x4EC5;&#x8981;&#x53D6;&#x5F97;&#x4E4B;&#x524D;&#x7684;&#x7F13;&#x5B58;&#x753B;&#x9762;&#xFF0C;&#x8FD8;&#x8981;&#x89E3;&#x7801;&#x4E4B;&#x540E;&#x7684;&#x753B;&#x9762;&#xFF0C;&#x901A;&#x8FC7;&#x524D;&#x540E;&#x753B;&#x9762;&#x7684;&#x4E0E;&#x672C;&#x5E27;&#x6570;&#x636E;&#x7684;&#x53E0;&#x52A0;&#x53D6;&#x5F97;&#x6700;&#x7EC8;&#x7684;&#x753B;&#x9762;&#x3002;
B&#x5E27;&#x538B;&#x7F29;&#x7387;&#x9AD8;&#xFF0C;&#x4F46;&#x662F;&#x89E3;&#x7801;&#x8017;&#x8D44;&#x6E90;&#x3001;&#x7B97;&#x6CD5;&#x76F8;&#x5BF9;&#x590D;&#x6742;&#x3002;
</code></pre>
<h2 id="&#x97F3;&#x89C6;&#x9891;&#x683C;&#x5F0F;"><a name="&#x97F3;&#x89C6;&#x9891;&#x683C;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x89C6;&#x9891;&#x683C;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5. &#x97F3;&#x89C6;&#x9891;&#x683C;&#x5F0F;</h2>
<h3 id="&#x97F3;&#x9891;&#x683C;&#x5F0F;&#x76F8;&#x5173;"><a name="&#x97F3;&#x9891;&#x683C;&#x5F0F;&#x76F8;&#x5173;" class="anchor-navigation-ex-anchor" href="#&#x97F3;&#x9891;&#x683C;&#x5F0F;&#x76F8;&#x5173;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.1. &#x97F3;&#x9891;&#x683C;&#x5F0F;&#x76F8;&#x5173;</h3>
<table>
<thead>
<tr>
<th>&#x683C;&#x5F0F;</th>
<th>&#x8BF4;&#x660E;</th>
<th>&#x7C7B;&#x578B;</th>
</tr>
</thead>
<tbody>
<tr>
<td>pcm</td>
<td>&#x5F55;&#x97F3;&#x540E;&#x76F4;&#x63A5;&#x5F97;&#x5230;&#x7684;&#x672A;&#x7ECF;&#x538B;&#x7F29;&#x7684;&#x6570;&#x636E;&#x6D41;&#xFF0C;&#x6CA1;&#x6709;&#x5934;&#x4FE1;&#x606F;&#x6216;&#x8005;&#x5E27;&#x4FE1;&#x606F; <br> &#x53EF;&#x4EE5;&#x4F7F;&#x7528; AUDACITY&#x8FD9;&#x4E2A;&#x8F6F;&#x4EF6; &#x64AD;&#x653E;pcm &#x6587;&#x4EF6;</td>
<td>&#x7F16;&#x7801;&#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>WAV</td>
<td>&#x7531;&#x6587;&#x4EF6;&#x5934;&#x90E8;&#x5206;&#x548C;&#x97F3;&#x9891;&#x6570;&#x636E;&#x4F53;&#x7EC4;&#x6210;&#x3002;&#x5FAE;&#x8F6F;&#x5F00;&#x53D1;&#x7684;&#x4E00;&#x79CD;&#x65E0;&#x635F;&#x7684;&#x97F3;&#x9891;&#x6587;&#x4EF6;&#x683C;&#x5F0F;</td>
<td>&#x5C01;&#x88C5;&#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>MP3</td>
<td>&#x6BCF;&#x4E2A;&#x5E27;&#x4E4B;&#x95F4;&#x76F8;&#x4E92;&#x72EC;&#x7ACB;&#xFF0C;&#x5404;&#x5E27;&#x76F8;&#x4E92;&#x72EC;&#x7ACB;&#x3002;&#x662F;&#x6709;&#x635F;&#x538B;&#x7F29;</td>
<td>&#x5C01;&#x88C5;&#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>m4a</td>
<td></td>
<td>&#x5C01;&#x88C5;&#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>AAC</td>
<td>&#x662F;&#x6709;&#x635F;&#x538B;&#x7F29;</td>
<td>&#x5C01;&#x88C5;&#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>AMR</td>
<td></td>
<td>&#x5C01;&#x88C5;&#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>CAF</td>
<td></td>
<td>&#x82F9;&#x679C;&#x7684;&#x4E00;&#x79CD;&#x97F3;&#x9891;&#x5C01;&#x88C5;&#x683C;&#x5F0F;</td>
</tr>
</tbody>
</table>
<h3 id="&#x5F53;&#x524D;&#x4E3B;&#x8981;&#x7684;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;"><a name="&#x5F53;&#x524D;&#x4E3B;&#x8981;&#x7684;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;" class="anchor-navigation-ex-anchor" href="#&#x5F53;&#x524D;&#x4E3B;&#x8981;&#x7684;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.2. &#x5F53;&#x524D;&#x4E3B;&#x8981;&#x7684;&#x6D41;&#x5A92;&#x4F53;&#x534F;&#x8BAE;</h3>
<table>
<thead>
<tr>
<th>&#x540D;&#x79F0;</th>
<th>&#x63A8;&#x51FA;&#x673A;&#x6784;</th>
<th>&#x4F20;&#x8F93;&#x5C42;&#x534F;&#x8BAE;</th>
<th>&#x5BA2;&#x6237;&#x7AEF;</th>
<th>&#x76EE;&#x524D;&#x4F7F;&#x7528;&#x9886;&#x57DF;</th>
</tr>
</thead>
<tbody>
<tr>
<td>RTSP + RTP</td>
<td>IETF</td>
<td>TCP+UDP</td>
<td>VLC ,WMP</td>
<td>IPTV</td>
</tr>
<tr>
<td>RTMP</td>
<td>Adobe Inc</td>
<td>TCP</td>
<td>flash</td>
<td>&#x4E92;&#x8054;&#x7F51;&#x76F4;&#x64AD;</td>
</tr>
<tr>
<td>RTMFP</td>
<td>Adobe Inc</td>
<td>UDP</td>
<td>flash</td>
<td>&#x4E92;&#x8054;&#x7F51;&#x76F4;&#x64AD;</td>
</tr>
<tr>
<td>MMS</td>
<td>microsoft Inc</td>
<td>TCP/UDP</td>
<td>WMP</td>
<td>&#x4E92;&#x8054;&#x7F51;&#x76F4;&#x64AD; +&#x70B9;&#x64AD;</td>
</tr>
<tr>
<td>HTTP</td>
<td>WWW+IETF</td>
<td>TCP</td>
<td>flash</td>
<td>&#x4E92;&#x8054;&#x7F51;&#x70B9;&#x64AD;</td>
</tr>
</tbody>
</table>
<h3 id="&#x89C6;&#x9891;&#x5C01;&#x88C5;&#x683C;&#x5F0F;"><a name="&#x89C6;&#x9891;&#x5C01;&#x88C5;&#x683C;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#&#x89C6;&#x9891;&#x5C01;&#x88C5;&#x683C;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.3. &#x89C6;&#x9891;&#x5C01;&#x88C5;&#x683C;&#x5F0F;</h3>
<table>
<thead>
<tr>
<th>&#x540D;&#x79F0;</th>
<th>&#x63A8;&#x51FA;&#x673A;&#x6784;</th>
<th>&#x6D41;&#x5A92;&#x4F53;</th>
<th>&#x652F;&#x6301;&#x7684;&#x89C6;&#x9891;&#x7F16;&#x7801;</th>
<th>&#x652F;&#x6301;&#x7684;&#x97F3;&#x9891;&#x7F16;&#x7801;</th>
<th>&#x76EE;&#x524D;&#x4F7F;&#x7528;&#x9886;&#x57DF;</th>
</tr>
</thead>
<tbody>
<tr>
<td>AVI</td>
<td>microsoft Inc</td>
<td>&#x4E0D;&#x652F;&#x6301;</td>
<td>&#x51E0;&#x4E4E;&#x6240;&#x6709;&#x683C;&#x5F0F;</td>
<td>&#x51E0;&#x4E4E;&#x6240;&#x6709;&#x683C;&#x5F0F;</td>
<td>BT&#x4E0B;&#x8F7D;&#x5F71;&#x89C6;</td>
</tr>
<tr>
<td>MP4</td>
<td>MPEG</td>
<td>&#x652F;&#x6301;</td>
<td>MPEG-2 , MPEG-4 <br> H.264,H.263</td>
<td>AAC ,MPEG-1 Layers &#x2160;, &#x2161;,&#x2162; <br> AC-3</td>
<td>&#x4E92;&#x8054;&#x7F51;&#x89C6;&#x9891;&#x7F51;&#x7AD9;</td>
</tr>
<tr>
<td>TS</td>
<td>MPEG</td>
<td>&#x652F;&#x6301;</td>
<td>MPEG-1 ,MPEG-2 ,<br>MPEG-4 ,H.264</td>
<td>MPEG-1 Layers &#x2160;, &#x2161;,&#x2162; <br> AAC</td>
<td>IPTV&#xFF0C;&#x6570;&#x5B57;&#x7535;&#x89C6;</td>
</tr>
<tr>
<td>FLV</td>
<td>adobe inc</td>
<td>&#x652F;&#x6301;</td>
<td>sorenson,VP6 ,H.264</td>
<td>MP3,ADPCM ,<br>Linear PCM ,AAC</td>
<td>&#x4E92;&#x8054;&#x7F51;&#x89C6;&#x9891;&#x7F51;&#x7AD9;</td>
</tr>
<tr>
<td>MKV</td>
<td>corecodec inc</td>
<td>&#x652F;&#x6301;</td>
<td>&#x51E0;&#x4E4E;&#x6240;&#x6709;&#x683C;&#x5F0F;</td>
<td>&#x51E0;&#x4E4E;&#x6240;&#x6709;&#x683C;&#x5F0F;</td>
<td>&#x4E92;&#x8054;&#x7F51;&#x89C6;&#x9891;&#x7F51;&#x7AD9;</td>
</tr>
<tr>
<td>RMVB</td>
<td>real networks inc</td>
<td>&#x652F;&#x6301;</td>
<td>RealVideo 8,9,10</td>
<td>AAC ,Cook Codec ,<br>RealAudio Lossless</td>
<td>BT&#x4E0B;&#x8F7D;&#x5F71;&#x89C6;</td>
</tr>
</tbody>
</table>
<h3 id="&#x89C6;&#x9891;&#x7F16;&#x7801;&#x683C;&#x5F0F;"><a name="&#x89C6;&#x9891;&#x7F16;&#x7801;&#x683C;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#&#x89C6;&#x9891;&#x7F16;&#x7801;&#x683C;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.4. &#x89C6;&#x9891;&#x7F16;&#x7801;&#x683C;&#x5F0F;</h3>
<table>
<thead>
<tr>
<th>&#x540D;&#x79F0;</th>
<th>&#x63A8;&#x51FA;&#x673A;&#x6784;</th>
<th>&#x63A8;&#x51FA;&#x65F6;&#x95F4;</th>
<th>&#x76EE;&#x524D;&#x4F7F;&#x7528;&#x9886;&#x57DF;</th>
</tr>
</thead>
<tbody>
<tr>
<td>H.264</td>
<td>MPEG/ITU-T</td>
<td>2003</td>
<td>&#x5404;&#x4E2A;&#x9886;&#x57DF;</td>
</tr>
<tr>
<td>HEVC(H.265)</td>
<td>MPEG/ITU-T</td>
<td>2013</td>
<td>&#x7814;&#x53D1;&#x4E2D;</td>
</tr>
<tr>
<td>MPEG2</td>
<td>MPEG</td>
<td>1994</td>
<td>&#x6570;&#x5B57;&#x7535;&#x89C6;</td>
</tr>
<tr>
<td>MPEG4</td>
<td>MPEG</td>
<td>2001</td>
<td>&#x4E0D;&#x6E29;&#x4E0D;&#x706B;</td>
</tr>
<tr>
<td>VP8</td>
<td>Google</td>
<td>2008</td>
<td>&#x4E0D;&#x666E;&#x53CA;</td>
</tr>
<tr>
<td>VP9</td>
<td>Google</td>
<td>2013</td>
<td>&#x7814;&#x53D1;&#x4E2D;</td>
</tr>
<tr>
<td>VC-1</td>
<td>Microsoft Inc.</td>
<td>2006</td>
<td>&#x5FAE;&#x8F6F;&#x5E73;&#x53F0;</td>
</tr>
<tr>
<td>wmv</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="wav&#x6587;&#x4EF6;&#x683C;&#x5F0F;"><a name="wav&#x6587;&#x4EF6;&#x683C;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#wav&#x6587;&#x4EF6;&#x683C;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>8.6. wav&#x6587;&#x4EF6;&#x683C;&#x5F0F;</h2>
<p>&#x5728;&#x6587;&#x4EF6;&#x7684;&#x524D;44&#x5B57;&#x8282;&#x653E;&#x7F6E;&#x6807;&#x5934;&#xFF0C;&#x4F7F;&#x64AD;&#x653E;&#x5668;&#x6216;&#x7F16;&#x8F91;&#x5668;&#x80FD;&#x591F;&#x7B80;&#x5355;&#x638C;&#x63E1;&#x6587;&#x4EF6;&#x7684;&#x57FA;&#x672C;&#x4FE1;&#x606F;&#xFF0C;&#x5176;&#x5185;&#x5BB9;&#x4EE5;&#x533A;&#x5757;(chunk)&#x4E3A;&#x6700;&#x5C0F;&#x5355;&#x4F4D;&#xFF0C;&#x6BCF;&#x4E00;&#x533A;&#x5757;&#x957F;&#x5EA6;&#x4E3A;4&#x5B57;&#x8282;&#x3002;</p>
<table>
<thead>
<tr>
<th>&#x540D;&#x79F0;</th>
<th>&#x5B57;&#x8282;</th>
<th>&#x7AEF;&#x5E8F;</th>
<th>&#x5185;&#x5BB9;</th>
</tr>
</thead>
<tbody>
<tr>
<td>ChunkID &#x533A;&#x5757;&#x7F16;&#x53F7;</td>
<td>4</td>
<td>&#x5927;&#x7AEF;</td>
<td>&quot;RIFF&quot;</td>
</tr>
<tr>
<td>ChunkSize &#x603B;&#x533A;&#x5757;&#x5927;&#x5C0F;</td>
<td>4</td>
<td>&#x5C0F;&#x7AEF;</td>
<td></td>
</tr>
<tr>
<td>Format &#x6587;&#x4EF6;&#x683C;&#x5F0F;</td>
<td>4</td>
<td>&#x5927;&#x7AEF;</td>
<td>WAVE</td>
</tr>
<tr>
<td>Subchunk1Id &#x5B50;&#x533A;&#x5757;1&#x7F16;&#x53F7;</td>
<td>4</td>
<td>&#x5927;&#x7AEF;</td>
<td>&quot;fmt &quot;</td>
</tr>
<tr>
<td>Subchunk1Size &#x5B50;&#x533A;&#x5757;1&#x5927;&#x5C0F;</td>
<td>4</td>
<td>&#x5C0F;&#x7AEF;</td>
<td>16</td>
</tr>
<tr>
<td>AudioFormat &#x97F3;&#x9891;&#x683C;&#x5F0F;</td>
<td>2</td>
<td>&#x5C0F;&#x7AEF;</td>
<td>1 pcm</td>
</tr>
<tr>
<td>NumChannels &#x58F0;&#x9053;&#x6570;&#x91CF;</td>
<td>2</td>
<td>&#x5C0F;&#x7AEF;</td>
<td>1 &#x5355;&#x58F0;&#x9053; &#xFF0C;2 &#x7ACB;&#x4F53;&#x58F0;</td>
</tr>
<tr>
<td>SampleRate &#x91C7;&#x6837;&#x7387;</td>
<td>4</td>
<td>&#x5C0F;&#x7AEF;</td>
<td>&#x5E38;&#x7528;&#x7684;&#x91C7;&#x6837;&#x9891;&#x7387;&#x6709; 11025, 22050 &#x548C; 44100 kHz</td>
</tr>
<tr>
<td>ByteRate &#x6BCF;&#x79D2;&#x6570;&#x636E;&#x5B57;&#x8282;&#x6570;&#x3002;&#x7801;&#x7387;&#xFF1F;</td>
<td>4</td>
<td>&#x5C0F;&#x7AEF;</td>
<td></td>
</tr>
<tr>
<td>BlockAlign &#x533A;&#x5757;&#x5BF9;&#x9F50;</td>
<td>2</td>
<td>&#x5C0F;&#x7AEF;</td>
<td>&#x58F0;&#x9053;&#x6570; * &#x6BCF;&#x4E2A;&#x91C7;&#x6837;&#x9700;&#x8981;&#x7684;bit  / 8</td>
</tr>
<tr>
<td>BitsPerSample &#x91C7;&#x6837;&#x4F4D;&#x6570;</td>
<td>2</td>
<td>&#x5C0F;&#x7AEF;</td>
<td></td>
</tr>
<tr>
<td>Subchunk2ID &#x5B50;&#x533A;&#x5757;2&#x7F16;&#x53F7;</td>
<td>4</td>
<td>&#x5927;&#x7AEF;</td>
<td></td>
</tr>
<tr>
<td>Subchunk2Size &#x5B50;&#x533A;&#x5757;2&#x5927;&#x5C0F;</td>
<td>4</td>
<td>&#x5C0F;&#x7AEF;</td>
<td></td>
</tr>
<tr>
<td>data &#x97F3;&#x9891;&#x6570;&#x636E;</td>
<td>n</td>
<td>&#x5C0F;&#x7AEF;</td>
<td></td>
</tr>
</tbody>
</table>
<footer class="page-footer"><span class="copyright">( no Copyright&#xFF0C;enjoy youself ! ) all right reserved&#xFF0C;powered by Gitbook</span><span class="footer-modification">The file was updated at :
2022-04-04 10:49:02
</span></footer>
                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="系统编译剪裁.html" class="navigation navigation-prev " aria-label="Previous page: 系统编译剪裁">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="音视频第三方库.html" class="navigation navigation-next " aria-label="Next page: 音视频第三方库">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"音视频","level":"1.17.5","depth":2,"next":{"title":"音视频第三方库","level":"1.17.6","depth":2,"path":"chinese/native/音视频第三方库.md","ref":"chinese/native/音视频第三方库.md","articles":[]},"previous":{"title":"系统编译剪裁","level":"1.17.4","depth":2,"path":"chinese/native/系统编译剪裁.md","ref":"chinese/native/系统编译剪裁.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-search","search-plus","todo","anchor-navigation-ex","copy-code-button","fontsettings","tbfed-pagefooter","local-video","splitter","expandable-chapters","favicon","theme-comscore","local-video"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"( no Copyright，enjoy youself ! )","modify_label":"The file was updated at :","modify_format":"YYYY-MM-DD HH:mm:ss"},"todo":{},"splitter":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"family":"sans","size":2,"theme":"white"},"highlight":{},"anchor-navigation-ex":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":true},"favicon":{"shortcut":"assets/images/favicon.ico","bookmark":"assets/images/favicon.ico"},"theme-comscore":{},"local-video":{},"copy-code-button":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{},"search-plus":{}},"theme":"default","author":"Aivin","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Aivin开发笔记","language":"zh-hans","gitbook":"*","description":"Aivin开发笔记"},"file":{"path":"chinese/native/音视频.md","mtime":"2022-04-04T02:49:02.769Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-04-04T03:47:09.782Z"},"basePath":"../..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../../gitbook/gitbook.js"></script>
    <script src="../../gitbook/theme.js"></script>
    
        
        <script src="../../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-search-plus/search.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-copy-code-button/toggle.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-local-video/video.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-splitter/splitter.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-theme-comscore/test.js"></script>
        
    

    </body>
</html>

